如何在 iOS 上使用 Capacitor 保存文件?
Posted
技术标签:
【中文标题】如何在 iOS 上使用 Capacitor 保存文件?【英文标题】:How to save file with Capacitor on iOS? 【发布时间】:2021-04-09 10:44:44 【问题描述】:我有以下代码(改编自 this tutorial)用于从后端保存文件:
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 上测试。
【问题讨论】:
【参考方案1】: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 中下载的解决方案。
【讨论】:
部分ios应用显示下载媒体对话框,部分应用如何实现?苹果会为企业公司提供特殊的api吗?以上是关于如何在 iOS 上使用 Capacitor 保存文件?的主要内容,如果未能解决你的问题,请参考以下文章
Capacitor Filesystem.getUri 未在 IOS 上返回完整文件路径
使用 Capacitor 构建的 iOS 应用程序的位置权限
Ionic Capacitor Deploy App on ios 13.3 device freeze splashscreen