4

我正在尝试提供在给定 Base64 字符串的情况下下载 PDF 的能力。我可以使用“react-native-view-pdf”查看 PDF。只是无法弄清楚如何实际下载文件。这将需要适用于 android 和 ios。

我已经尝试了各种论坛,但遗憾的是我无处可去。

注意:this.props.pdf 是 Base64 字符串。

尝试 1)

var path = RNFetchBlob.fs.dirs.DocumentDir + "/bill.pdf";
RNFetchBlob.fs.writeFile(path, this.props.pdf, "base64").then(res => {
  console.log("File : ", res);
});

尝试 2)

RNFetchBlob.config({
  fileCache : true,
  appendExt : 'pdf'
})
.fetch('GET',`${this.props.PDFLink}`)
.then((res) => {
  // open the document directly
  if(Platform.OS == "ios"){
  RNFetchBlob.ios.previewDocument(res.path())
  }
  else{
    RNFetchBlob
    .config({
        addAndroidDownloads : {
            useDownloadManager : true, // <-- this is the only thing required
            // Optional, override notification setting (default to true)
            notification : false,
            // Optional, but recommended since android DownloadManager will fail when
            // the url does not contains a file extension, by default the mime type will be text/plain
            mime : 'application/pdf',
            description : 'File downloaded by download manager.'
        }
    })
    .fetch('GET',`${this.props.PDFLink}`)
    .then((resp) => {
      // the path of downloaded file
      resp.path()
    })
  }
})
.catch(error => {
  console.error(error);
});

我希望在屏幕加载时看到用户可以下载 PDF。我已经将它显示给用户,只是希望他们也能够下载文件。

4

1 回答 1

6

要下载文件,您可以使用来自 rn-fetch-blob 的RNFetchBlob.fs.writeFile api,如下所示。您还可以从他们的文档https://github.com/joltup/rn-fetch-blob#user-content-file-stream中参考其他文件流 API

RNFetchBlob
        .config({
            addAndroidDownloads : {
                useDownloadManager : true, // <-- this is the only thing required
                // Optional, override notification setting (default to true)
                notification : false,
                // Optional, but recommended since android DownloadManager will fail when
                // the url does not contains a file extension, by default the mime type will be text/plain
                mime : 'application/pdf',
                description : 'File downloaded by download manager.'
            }
        })
        .fetch('GET',`${this.props.PDFLink}`)
        .then((resp) => {
          // the path of downloaded file
          // resp.path()
          let base64Str = resp.data;
          let pdfLocation = RNFetchBlob.fs.dirs.DocumentDir + '/' + 'test.pdf';
          RNFetchBlob.fs.writeFile(pdfLocation, RNFetchBlob.base64.encode(base64Str), 'base64');

        })

希望这可以帮助 :)

于 2020-04-14T18:34:01.303 回答