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

w1e3prcc  于 2022-12-16  发布在  Ionic
关注(0)|答案(2)|浏览(194)

我有以下代码(改编自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上测试。

ryevplcw

ryevplcw1#

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-opener 2,并将ionic FileOpener放到app. module. ts中的提供商处。如果你不使用Cordova,你也不需要进行Cordova设置,它可以作为一个单独的插件与Capacitor一起工作。据我所知,Capacitor不提供在iOS中下载的解决方案。

jhiyze9q

jhiyze9q2#

我遇到过同样的问题(只有capacitor 4.2.0),通过在我的Info.plist中添加以下权限解决了这个问题:

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

  <key>LSSupportsOpeningDocumentsInPlace</key>
  <string>YES</string>

在此之后,使用目录Directory.Documents使我在Files应用程序下看到了一个带有应用程序名称的Documents目录。
希望有帮助。

相关问题