我有以下代码(改编自本教程),用于从后端保存文件:
import { FilesystemDirectory, Plugins } from '@capacitor/core';
const { Filesystem } = Plugins;
await Filesystem.writeFile({
path: "filename.txt",
data: "base64 data",
directory: FilesystemDirectory.Documents,
});
此代码在 Android 上运行良好,甚至在内部存储的根目录中创建
Documents
目录。不幸的是,在 iOS 上,无论我使用哪个目录,都不会创建文件(我已经使用 Documents
、Data
和 ExternalStorage
进行了测试)。
当我将此代码块放入 try..catch
中时,不会抛出任何内容,因此操作应该已成功完成,只是没有保存文件。在一台 Android 设备和两台 iOS 设备上进行了测试。
我遇到了同样的问题(仅使用电容器 4.2.0)并通过在 Info.plist 中添加以下权限来解决它:
<key>UIFileSharingEnabled</key>
<string>YES</string>
<key>LSSupportsOpeningDocumentsInPlace</key>
<string>YES</string>
此后,使用目录
Directory.Documents
使我可以在文件应用程序下看到一个文档目录,其中包含应用程序的名称。
希望有帮助。
iOS 不允许直接访问文件存储。我让它与 Ionic-native 的 FileOpener 一起使用,如下所示:
import { FileOpener } from '@ionic-native/file-opener/ngx';
import { FilesystemDirectory, Plugins } from '@capacitor/core';
const { Filesystem } = Plugins;
const result = await Filesystem.writeFile({
path: "filename.txt",
data: "base64 data",
directory: FilesystemDirectory.Documents,
});
this.fileOpener.showOpenWithDialog(result.uri, 'application/json')
它会打开一个对话框,您可以在其中选择文件的保存位置。这有点令人困惑,因为该功能的描述是“使用系统模式打开以使用已安装的应用程序打开文件”,但保存也可以使用它。
您还需要安装 cordova-plugin-file-opener2 并将 ionic FileOpener 添加到 app.module.ts 中的提供程序中。如果您不使用 Cordova,则无需进行 Cordova 设置,它作为单独的插件与 Capacitor 一起工作。据我所知,Capacitor 没有提供在 iOS 中下载的解决方案。
@ionic-native/file-opener 不再维护。
这对我有用:https://www.npmjs.com/package/@capacitor-community/file-opener
import { FileOpener, FileOpenerOptions } from '@capacitor-community/file-opener';
try {
const fileOpenerOptions: FileOpenerOptions = {
filePath: 'file:///path/to/file',
contentType: 'application/pdf',
openWithDefault: true,
};
await FileOpener.open(fileOpenerOptions);
} catch (e) {
console.log('Error opening file', e);
}