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

问题描述 投票:0回答:3

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

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 设备上进行了测试。

ios ionic-framework capacitor ionic5
3个回答
7
投票

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

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

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

此后,使用目录

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

希望有帮助。


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')

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

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


0
投票

@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);
}
© www.soinside.com 2019 - 2024. All rights reserved.