iOS 上如何使用 Capacitor 保存文件?

Ada*_*m H 5 ios ionic-framework capacitor ionic5

我有以下代码(改编自本教程),用于从后端保存文件:

import { FilesystemDirectory, Plugins } from '@capacitor/core';
const { Filesystem } = Plugins;

await Filesystem.writeFile({
    path: "filename.txt",
    data: "base64 data",
    directory: FilesystemDirectory.Documents,
  });
Run Code Online (Sandbox Code Playgroud)

该代码在 Android 上运行良好,甚至Documents在内部存储的根目录中创建目录。不幸的是,在 iOS 上,无论我使用哪个目录,都不会创建文件(我已经使用DocumentsData和进行了测试ExternalStorage)。当我将此代码块放入其中时try..catch,不会抛出任何内容,因此操作应该已成功完成,只是没有保存文件。在一台 Android 设备和两台 iOS 设备上进行了测试。

Boa*_*oat 6

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')
Run Code Online (Sandbox Code Playgroud)

它会打开一个对话框,您可以在其中选择文件的保存位置。这有点令人困惑,因为该功能的描述是“使用系统模式打开以使用已安装的应用程序打开文件”,但保存也适用。

您还需要安装 cordova-plugin-file-opener2 并将 ionic FileOpener 添加到 app.module.ts 中的提供程序中。如果您不使用 Cordova,则无需进行 Cordova 设置,它作为单独的插件与 Capacitor 一起工作。据我所知,Capacitor 不提供在 iOS 中下载的解决方案。


小智 6

我遇到了同样的问题(仅使用电容器 4.2.0)并通过在 Info.plist 中添加以下权限来解决它:

  <key>UIFileSharingEnabled</key>
  <string>YES</string>

  <key>LSSupportsOpeningDocumentsInPlace</key>
  <string>YES</string>
Run Code Online (Sandbox Code Playgroud)

之后,使用目录Directory.Documents使我可以在文件应用程序下看到一个文档目录,其中包含应用程序的名称。

希望能帮助到你。