如何在 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 上,无论我使用什么目录,都不会创建任何文件(我已经使用 DocumentsDataExternalStorage 对其进行了测试)。 当我将此代码块放入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

Capacitor iOS App 无法缩放到全高

状态栏使用 Capacitor 覆盖 iOS 上的 webview

使用 PDFKit Swift (ios)/Capacitor 加载 PDF 而不下载文件