@capacitor/filesystem
文件系统 API 提供了一个类似 NodeJS 的 API,用于在设备上处理文件。
安装
npm install @capacitor/filesystem@latest-5
npx cap sync
iOS
若要使文件出现在“文件”应用中,必须在 Info.plist
中将以下键设置为 YES
:
UIFileSharingEnabled
(Application supports iTunes file sharing
)LSSupportsOpeningDocumentsInPlace
(Supports opening documents in place
)
请阅读 配置 iOS 以获取帮助。
Android
如果在 Android 10 及更早版本中使用 Directory.Documents
或 Directory.ExternalStorage
,此 API 要求在 AndroidManifest.xml
中添加以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
有关设置 Android 权限的更多信息,请阅读 Android 指南 中的 设置权限。
请注意,Directory.ExternalStorage
仅在 Android 9 或更早版本上可用,而 Directory.Documents
在 Android 11 及更新版本上仅允许访问您的应用创建的文件/文件夹。
处理大文件可能需要您在 AndroidManifest.xml
的 <application>
标签中添加 android:largeHeap="true"
。
理解目录和文件
iOS 和 Android 在文件之间有额外的分离层,例如备份到云端的特殊目录,或用于存储文档的目录。文件系统 API 提供了一种简单的方法,将每个操作限定在设备上的特定特殊目录。
此外,文件系统 API 支持使用完整的 file://
路径,或在 Android 上读取 content://
文件。只需省略 directory
参数即可使用完整文件路径。
示例
import { Filesystem, Directory, Encoding } from '@capacitor/filesystem';
const writeSecretFile = async () => {
await Filesystem.writeFile({
path: 'secrets/text.txt',
data: '这是一个测试',
directory: Directory.Documents,
encoding: Encoding.UTF8,
});
};
const readSecretFile = async () => {
const contents = await Filesystem.readFile({
path: 'secrets/text.txt',
directory: Directory.Documents,
encoding: Encoding.UTF8,
});
console.log('秘密:', contents);
};
const deleteSecretFile = async () => {
await Filesystem.deleteFile({
path: 'secrets/text.txt',
directory: Directory.Documents,
});
};
const readFilePath = async () => {
// 这是一个读取完整文件路径文件的示例。使用此方法从返回文件 URI 的插件(例如相机)读取二进制数据(base64 编码)。
const contents = await Filesystem.readFile({
path: 'file:///var/mobile/Containers/Data/Application/22A433FD-D82D-4989-8BE6-9FC49DEA20BB/Documents/text.txt',
});
console.log('数据:', contents);
};
API
readFile(...)
readFile(options: ReadFileOptions) => Promise<ReadFileResult>
从磁盘读取文件
参数 | 类型 |
---|---|
options |
|
返回值:
Promise<ReadFileResult>
自: 1.0.0
writeFile(...)
writeFile(options: WriteFileOptions) => Promise<WriteFileResult>
将文件写入设备上的指定位置
参数 | 类型 |
---|---|
options |
|
返回值:
Promise<WriteFileResult>
自: 1.0.0
appendFile(...)
appendFile(options: AppendFileOptions) => Promise<void>
在设备上的指定位置向文件追加内容
参数 | 类型 |
---|---|
options |
|
自: 1.0.0
deleteFile(...)
deleteFile(options: DeleteFileOptions) => Promise<void>
从磁盘删除文件
参数 | 类型 |
---|---|
options |
|
自: 1.0.0
mkdir(...)
mkdir(options: MkdirOptions) => Promise<void>
创建目录。
参数 | 类型 |
---|---|
options |
|
自: 1.0.0
rmdir(...)
rmdir(options: RmdirOptions) => Promise<void>
删除目录
参数 | 类型 |
---|---|
options |
|
自: 1.0.0
readdir(...)
readdir(options: ReaddirOptions) => Promise<ReaddirResult>
返回目录中的文件列表(非递归)
参数 | 类型 |
---|---|
options |
|
返回值:
Promise<ReaddirResult>
自: 1.0.0
getUri(...)
getUri(options: GetUriOptions) => Promise<GetUriResult>
返回路径和目录的完整文件 URI
参数 | 类型 |
---|---|
options |
|
返回值:
Promise<GetUriResult>
自: 1.0.0
stat(...)
stat(options: StatOptions) => Promise<StatResult>
返回文件的数据信息
参数 | 类型 |
---|---|
options |
|
返回值:
Promise<StatResult>
自: 1.0.0
rename(...)
rename(options: RenameOptions) => Promise<void>
重命名文件或目录
参数 | 类型 |
---|---|
options |
|
自: 1.0.0
copy(...)
copy(options: CopyOptions) => Promise<CopyResult>
复制文件或目录
参数 | 类型 |
---|---|
options |
|
返回值:
Promise<CopyResult>
自: 1.0.0
checkPermissions()
checkPermissions() => Promise<PermissionStatus>
检查读/写权限。
在 Android 上必需,仅在使用 Directory.Documents
或
Directory.ExternalStorage
时。
返回值:
Promise<PermissionStatus>
自: 1.0.0
requestPermissions()
requestPermissions() => Promise<PermissionStatus>
请求读/写权限。
在 Android 上必需,仅在使用 Directory.Documents
或
Directory.ExternalStorage
时。
返回值:
Promise<PermissionStatus>
自: 1.0.0
downloadFile(...)
downloadFile(options: DownloadFileOptions) => Promise<DownloadFileResult>
向服务器执行 HTTP 请求并将文件下载到指定目标位置。
参数 | 类型 |
---|---|
options |
|
返回值:
Promise<DownloadFileResult>
自: 5.1.0
addListener('progress', ...)
addListener(eventName: 'progress', listenerFunc: ProgressListener) => Promise<PluginListenerHandle> & PluginListenerHandle
添加文件下载进度事件的监听器。
参数 | 类型 |
---|---|
eventName | 'progress' |
listenerFunc |
|
返回值:
Promise<PluginListenerHandle> & PluginListenerHandle
自: 5.1.0
removeAllListeners()
removeAllListeners() => Promise<void>
移除此插件的所有监听器。
自: 5.2.0
接口
ReadFileResult
属性 | 类型 | 描述 | 自 |
---|---|---|---|
data | string | Blob | 文件中包含的数据表示形式 注意:Blob 仅在 Web 上可用。在原生平台上,数据以字符串形式返回。 | 1.0.0 |
ReadFileOptions
属性 | 类型 | 描述 | 自 |
---|---|---|---|
path | string | 要读取的文件路径 | 1.0.0 |
directory |
| 从中读取文件的 Directory | 1.0.0 |
encoding |
| 读取文件的编码方式,如果未提供,则数据以二进制形式读取并返回 base64 编码。传递 Encoding.UTF8 以字符串形式读取数据 | 1.0.0 |
WriteFileResult
属性 | 类型 | 描述 | 自 |
---|---|---|---|
uri | string | 文件被写入的 uri | 1.0.0 |
WriteFileOptions
属性 | 类型 | 描述 | 默认值 | 自 |
---|---|---|---|---|
path | string | 要写入的文件路径 | 1.0.0 | |
data | string | Blob | 要写入的数据 注意:Blob 数据仅在 Web 上受支持。 | 1.0.0 | |
directory |
| 存储文件的 Directory | 1.0.0 | |
encoding |
| 写入文件的编码方式。如果未提供,数据以 base64 编码写入。传递 Encoding.UTF8 以字符串形式写入数据 | 1.0.0 | |
recursive | boolean | 是否创建任何缺失的父目录。 | false | 1.0.0 |
AppendFileOptions
属性 | 类型 | 描述 | 自 |
---|---|---|---|
path | string | 要追加的文件路径 | 1.0.0 |
data | string | 要写入的数据 | 1.0.0 |
directory |
| 存储文件的 Directory | 1.0.0 |
encoding |
| 写入文件的编码方式。如果未提供,数据以 base64 编码写入。传递 Encoding.UTF8 以字符串形式写入数据 | 1.0.0 |
DeleteFileOptions
属性 | 类型 | 描述 | 自 |
---|---|---|---|
path | string | 要删除的文件路径 | 1.0.0 |
directory |
| 从中删除文件的 Directory | 1.0.0 |
MkdirOptions
属性 | 类型 | 描述 | 默认值 | 自 |
---|---|---|---|---|
path | string | 新目录的路径 | 1.0.0 | |
directory |
| 创建新目录的 Directory | 1.0.0 | |
recursive | boolean | 是否同时创建任何缺失的父目录。 | false | 1.0.0 |
RmdirOptions
属性 | 类型 | 描述 | 默认值 | 自 |
---|---|---|---|---|
path | string | 要删除的目录路径 | 1.0.0 | |
directory |
| 从中删除目录的 Directory | 1.0.0 | |
recursive | boolean | 是否递归删除目录的内容 | false | 1.0.0 |
ReaddirResult
属性 | 类型 | 描述 | 自 |
---|---|---|---|
files | FileInfo[] | 目录内的文件和目录列表 | 1.0.0 |
FileInfo
属性 | 类型 | 描述 | 自 |
---|---|---|---|
name | string | 文件或目录的名称。 | |
type | 'file' | 'directory' | 文件类型。 | 4.0.0 |
size | number | 文件大小(字节)。 | 4.0.0 |
ctime | number | 创建时间(毫秒)。在 Android 7 及更早设备上不可用。 | 4.0.0 |
mtime | number | 最后修改时间(毫秒)。 | 4.0.0 |
uri | string | 文件的 uri。 | 4.0.0 |
ReaddirOptions
属性 | 类型 |
---|