React Native Android 中的 RNFetchBlob 读取文件功能崩溃了

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

我正在尝试在 React Native 中共享 pdf 文件。但应用程序在这样做时崩溃了。请帮忙。以下是代码

     async function func_1(
    pdfUrl: string,
   

  ) {
    let result = Platform.OS === 'android' && (await requestReadSmsPermission());
    let filePath: string | null = null;
    try {
      if (
        (result &&
          Platform.OS == 'android' &&
          result?.[PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE] ===
            PermissionsAndroid.RESULTS.GRANTED &&
          result?.[PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE] ===
            PermissionsAndroid.RESULTS.GRANTED) ||
        Platform.OS == 'ios'
      ) {
        const dirs = RNFetchBlob.fs.dirs;
      
        const dynamicFileName = `FileName_123.pdf`;
        const reportName = dynamicFileName;
        const downloadPath =
          Platform.OS === 'ios'
            ? (dirs.DocumentDir || dirs.MainBundleDir) + '/' + reportName
            : dirs.DownloadDir + '/' + reportName;

        RNFetchBlob.config({
          fileCache: true,
          path: downloadPath,
          addAndroidDownloads: {
            title: reportName,
            useDownloadManager: true,
            notification: true,
            path: downloadPath,
            mime: mimeType(downloadPath),
            description: 'File downloaded by download manager.',
          },
        })
          .fetch('GET', encodeURI(pdfUrl), {})
          .then(async (res) => {
           
            console.log({ res });
            filePath = res?.path();
            console.log({ filePath });

            const shareOptions = {
              title: dynamicFileName,
              url: `file://${res?.path()}`,
              failOnCancel: false,
              showAppsToView: true,
              mimeType: 'application/pdf',
            };
            Share.open(shareOptions);
          })
          .catch((error) => {
           console.log(error)
          });
      } else {

      }
    } catch (err) {
     console.log(err)
    }
  }

当我尝试上面的代码时,一切正常,但在共享文件时,它说 - 共享失败,请稍后再试。 (在whatsapp、团队中尝试过)。 我的文件路径如下 - /storage/emulated/0/Download/FileName_123.pdf

当我将 uri 的代码调整为 base64 时,应用程序崩溃,而不提供任何日志

RNFetchBlob.config(configOptions)
    .fetch('GET', pdfUrl)
    .then((resp) => {
      filePath = resp?.path();
      return resp?.readFile('base64'); //crashes here.
    })
    .then(async (base64Data) => {
      base64Data = `data:${type};base64,` + base64Data;
      await Share.open({ title: dynamicFileName, url: base64Data });
    })
    .catch((err) => {
     console.log(err)
    });

我正在使用“react-native-share”:“^ 6.2.1”和“rn-fetch-blob”:“^ 0.12.0”,反应本机版本是“react-native”:“0.67.4”。

请帮助 kindoff 困了一周了。检查 Android > 10

android react-native base64 rn-fetch-blob react-native-share
2个回答
0
投票

我通过更改下载目录路径使其工作。由于权限问题,它无法工作。


0
投票

发生在我身上的文件名中有“_”或“”。从名称中删除这些字符应该可以。现在对我来说工作得很好。

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