PublicStorage

Struct PublicStorage 

Source
pub struct PublicStorage<'a, R: Runtime>(/* private fields */);
Expand description

API of file storage that is available to other applications and users.

§Examples

fn example(app: &tauri::AppHandle) {
    use tauri_plugin_android_fs::AndroidFsExt as _;
 
    let api = app.android_fs();
    let public_storage = api.public_storage();
}

Implementations§

Source§

impl<'a, R: Runtime> PublicStorage<'a, R>

Source

pub fn create_file_in_app_dir( &self, dir: impl Into<PublicDir>, relative_path: impl AsRef<str>, mime_type: Option<&str>, ) -> Result<FileUri>

Creates a new empty file in the app dir of specified public directory and returns a persistent read-write URI.

The created file has following features :

  • Will be registered with the corresponding MediaStore as needed.
  • Always supports remove and rename by this app until the app uninstalled.
  • Not removed when the app is uninstalled.

Please note that this has a different meaning from std::fs::create that open the file in write mod. If you need it, use AndroidFs::open_file with [FileAccessMode::WriteTrucncate].

This is the same as following:

let app_name = public_storage.app_dir_name()?;
public_storage.create_file(
    dir,
    format!("{app_name}/{relative_path}"),
    mime_type
)?;
§Args
  • dir :
    The base directory.
    When using PublicImageDir, use only image MIME types for mime_type, which is discussed below.; using other types may cause errors. Similarly, use only the corresponding media types for PublicVideoDir and PublicAudioDir. Only PublicGeneralPurposeDir supports all MIME types.

  • relative_path :
    The file path relative to the base directory.
    Any missing subdirectories in the specified path will be created automatically.
    If a file with the same name already exists, the system append a sequential number to ensure uniqueness.
    If no extension is present, the system may infer one from mime_type and may append it to the file name. But this append-extension operation depends on the model and version.

  • mime_type :
    The MIME type of the file to be created.
    If this is None, MIME type is inferred from the extension of relative_path and if that fails, application/octet-stream is used.

§Support

Android 10 (API level 29) or higher.

Note :

Source

pub fn create_file( &self, dir: impl Into<PublicDir>, relative_path_with_subdir: impl AsRef<str>, mime_type: Option<&str>, ) -> Result<FileUri>

Creates a new empty file in the specified public directory and returns a persistent read-write URI.

The created file has following features :

  • Will be registered with the corresponding MediaStore as needed.
  • Always supports remove and rename by this app until the app uninstalled.
  • Not removed when the app is uninstalled.

Please note that this has a different meaning from std::fs::create that open the file in write mod. If you need it, use AndroidFs::open_file with [FileAccessMode::WriteTrucncate].

§Args
  • dir :
    The base directory.
    When using PublicImageDir, use only image MIME types for mime_type, which is discussed below.; using other types may cause errors. Similarly, use only the corresponding media types for PublicVideoDir and PublicAudioDir. Only PublicGeneralPurposeDir supports all MIME types.

  • relative_path_with_subdir :
    The file path relative to the base directory.
    Please specify a subdirectory in this, such as MyApp/file.txt or MyApp/2025-2-11/file.txt. Do not use file.txt.
    As shown above, it is customary to specify the app name at the beginning of the subdirectory, and in this case, using PublicStorage::create_file_in_app_dir is recommended.
    Any missing subdirectories in the specified path will be created automatically.
    If a file with the same name already exists, the system append a sequential number to ensure uniqueness.
    If no extension is present, the system may infer one from mime_type and may append it to the file name. But this append-extension operation depends on the model and version.

  • mime_type :
    The MIME type of the file to be created.
    If this is None, MIME type is inferred from the extension of relative_path_with_subdir and if that fails, application/octet-stream is used.

§Support

Android 10 (API level 29) or higher.

Note :

Source

pub fn create_dir_all( &self, dir: impl Into<PublicDir>, relative_path: impl AsRef<str>, ) -> Result<()>

Recursively create a directory and all of its parent components if they are missing.
If it already exists, do nothing.

PublicStorage::create_file does this automatically, so there is no need to use it together.

§Args
  • dir :
    The base directory.

  • relative_path :
    The directory path relative to the base directory.

§Support

All.

Source

pub fn create_dir_all_in_app_dir( &self, dir: impl Into<PublicDir>, relative_path: impl AsRef<str>, ) -> Result<()>

Recursively create a directory and all of its parent components if they are missing.
If it already exists, do nothing.

PublicStorage::create_file_in_app_dir does this automatically, so there is no need to use it together.

This is the same as following:

let app_name = public_storage.app_dir_name()?;
public_storage.create_dir_all(
    dir,
    format!("{app_name}/{relative_path}"),
)?;
§Args
  • dir :
    The base directory.

  • relative_path :
    The directory path relative to the base directory.

§Support

All.

Source

pub fn is_audiobooks_dir_available(&self) -> Result<bool>

Verify whether PublicAudioDir::Audiobooks is available on a given device.

§Support

All.

Source

pub fn is_recordings_dir_available(&self) -> Result<bool>

Verify whether PublicAudioDir::Recordings is available on a given device.

§Support

All.

Source

pub fn app_dir_name(&self) -> Result<&str>

Resolve the app dir name from Tauri’s config.

§Support

All.

Auto Trait Implementations§

§

impl<'a, R> Freeze for PublicStorage<'a, R>

§

impl<'a, R> RefUnwindSafe for PublicStorage<'a, R>

§

impl<'a, R> Send for PublicStorage<'a, R>

§

impl<'a, R> Sync for PublicStorage<'a, R>

§

impl<'a, R> Unpin for PublicStorage<'a, R>

§

impl<'a, R> UnwindSafe for PublicStorage<'a, R>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> ErasedDestructor for T
where T: 'static,