@capacitor/filesystem
Filesystem API 提供类似 NodeJS 的 API,用于在设备上处理文件。
安装
npm install @capacitor/filesystem
npx cap sync
Apple 隐私清单要求
Apple 规定应用开发者现在必须为 API 使用指定已批准的原因,以增强用户隐私。到 2024 年 5 月 1 日,在向 App Store Connect 提交应用时需要包含这些原因。
在应用中使用此特定插件时,您必须在 /ios/App 中创建 PrivacyInfo.xcprivacy 文件或使用 VS Code 扩展生成它,并指定使用原因。
有关如何执行此操作的详细步骤,请参阅 Capacitor 文档。
对于此插件,所需的字典键是 NSPrivacyAccessedAPICategoryFileTimestamp,推荐的原因是 C617.1。
示例 PrivacyInfo.xcprivacy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
</dict>
</plist>
从 downloadFile 迁移到 File Transfer 插件
从版本 7.1.0 开始,Filesystem 插件中的 downloadFile 功能已被弃用,推荐使用新的 @capacitor/file-transfer 插件。
安装 File Transfer 插件
npm install @capacitor/file-transfer
npx cap sync
迁移示例
之前(使用 Filesystem 插件):
import { Filesystem, Directory } from '@capacitor/filesystem';
await Filesystem.downloadFile({
url: 'https://example.com/file.pdf',
path: 'downloaded-file.pdf',
directory: Directory.Documents,
progress: true
});
// 进度事件
Filesystem.addListener('progress', (progress) => {
console.log(`Downloaded ${progress.bytes} of ${progress.contentLength}`);
});
之后(使用 File Transfer 插件):
import { FileTransfer } from '@capacitor/file-transfer';
import { Filesystem, Directory } from '@capacitor/filesystem';
// 首先使用 Filesystem 获取完整文件路径
const fileInfo = await Filesystem.getUri({
directory: Directory.Documents,
path: 'downloaded-file.pdf'
});
// 然后使用 FileTransfer 插件下载
await FileTransfer.downloadFile({
url: 'https://example.com/file.pdf',
path: fileInfo.uri,
progress: true
});
// 进度事件
FileTransfer.addListener('progress', (progress) => {
console.log(`Downloaded ${progress.bytes} of ${progress.contentLength}`);
});
File Transfer 插件提供更高的可靠性、更好的错误处理(带有特定错误代码),并且还添加了上传功能。
iOS 平台
要使文件显示在"文件"应用中,您还必须在 Info.plist 中设置以下键为 YES