IOS文档目录中无法查看Pdf文件

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

我正在尝试下载反应本机但使用库(ReactNativeBlobUtil)的文件。对于 Android,它工作正常,但对于 IOS,文件位于文档目录中,但不在所需位置。它位于多个文件夹下,并且也无法访问。

const downloadReport = async () => {
    try {
      const { dirs } = ReactNativeBlobUtil.fs;
      const dirToSave = LAYOUT.isiOS ? dirs.DocumentDir : dirs.LegacyDownloadDir;
      const date = new Date();
      const fileName = `download${Math.floor(
        date.getDate() + date.getSeconds() / 2
      )}.pdf`;

      const config = {
        fileCache: true,
        addAndroidDownloads: {
          useDownloadManager: true,
          notification: true,
          path: `${dirToSave}/${fileName}`,
          description: t("downloading"),
        },
        addIOSDownloads: {
          notification: true,
          path: `${dirToSave}/${fileName}`,
          description: t("downloading"),
        },
      };

      await ReactNativeBlobUtil.config(config)
        .fetch("GET", FILE_URL, {})
        .then((res) => {
          console.log("The file saved to ", res.path());
        });
      showSuccessMessage(t("fileDownloadedSuccessfully"));
    } catch (error) {
      showErrorMessage(t("failedToDownloadFile"));
    }
  };

这是我在 IOS 中获取的文件位置。

/var/mobile/容器/数据/应用程序/54A6714F-9875-4612-A0AB-EDC92FA65C15/文档/ReactNativeBlobUtil_tmp/ReactNativeBlobUtilTmp_mlp7gzc9srh232rrggpngt

当我下载 pdf 文件时,但文件扩展名不存在。保存的文件类型为data。这是不希望的。

这是我的 info.plist 文件,我在其中添加了所需的权限。

<key>UIFileSharingEnabled</key>
<true/>
<key>CFBundleGetInfoString</key>
<string></string>
<key>LSApplicationCategoryType</key>
<string></string>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
<key> UIFileSharingEnabled</key>
<true/>
<key>NSDownloadsFolderUsageDescription</key>
<true/>

我尝试在 info.plist 文件中添加这些权限,但没有任何效果。请给我一些如何解决这个问题的建议。

ios react-native react-native-pdf react-native-blob-util
1个回答
0
投票

嗨,我已经自己解决了这个问题 我将文件保存在我的 IOS 设备的文档目录中,但该文件没有以 .pdf 扩展名保存在那里,所以我手动附加了文件扩展名,因为 IOS 不会自己执行此操作,所以这对我有用,我正在分享解决方案下面。

const downloadReport = async () => {
    try {
      const { dirs } = ReactNativeBlobUtil.fs;
      const dirToSave = LAYOUT.isiOS
        ? dirs.DocumentDir
        : dirs.LegacyDownloadDir;
      const date = new Date();
      const fileName = `download${Math.floor(
        date.getDate() + date.getSeconds() / 2
      )}.pdf`;

      const config = {
        fileCache: true,
        addAndroidDownloads: {
          useDownloadManager: true,
          notification: true,
          path: `${dirToSave}/${fileName}`,
          description: t("downloading"),
        },
        path: `${dirToSave}/${fileName}`,
        appendExt: "pdf",
      };

      await ReactNativeBlobUtil.config(config).fetch("GET", FILE_URL, {});
      showSuccessMessage(t("fileDownloadedSuccessfully"));
    } catch (error) {
      showErrorMessage(t("failedToDownloadFile"));
    }
  };

这是我解决这个问题的方法

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.