12

我正在使用react-native-fs,我正在尝试将 pdf 文件的 base64 保存到我的 android 模拟器文件系统。

我从服务器收到 base64 编码的 pdf。
然后我使用以下行解码 base64 字符串:

var pdfBase64 = 'data:application/pdf;base64,'+base64Str;

保存文件()函数

saveFile(filename, pdfBase64){

    // create a path you want to write to
    var path = RNFS.DocumentDirectoryPath + '/' + filename;

     // write the file
     RNFS.writeFile(path, base64Image, 'base64').then((success) => {
       console.log('FILE WRITTEN!');
     })
     .catch((err) => {
       console.log("SaveFile()", err.message);
     });
}

错误
当我尝试保存 pdfBase64 时,saveFile() 函数捕获以下错误:

bad base-64

问题
谁能告诉我在哪里或我做错了什么?谢谢。

4

3 回答 3

21

对于任何有同样问题的人,这里是解决方案。

解决方案

react-native-pdf-view 必须采用 pdf_base64 的文件路径。

首先,我使用react-native-fetch-blob从服务器请求 pdf base64。(因为 RN fetch API 尚不支持 BLOB)。

我还发现 react-native-fetch-blob 还有一个 FileSystem API,它比“react-native-fs”库更好地记录和更容易理解。(查看它的 FileSystem API 文档

接收base64 pdf并将其保存到文件路径:

var RNFetchBlob = require('react-native-fetch-blob').default;

const DocumentDir = RNFetchBlob.fs.dirs.DocumentDir;

getPdfFromServer: function(uri_attachment, filename_attachment) {
   return new Promise((RESOLVE, REJECT) => {

      // Fetch attachment
      RNFetchBlob.fetch('GET', config.apiRoot+'/app/'+uri_attachment)
      .then((res) => {

          let base64Str = res.data;
          let pdfLocation = DocumentDir + '/' + filename_attachment;

          RNFetchBlob.fs.writeFile(pdfLocation, pdf_base64Str, 'base64');
          RESOLVE(pdfLocation);
      })
   }).catch((error) => {
       // error handling
       console.log("Error", error)
   });
}

我做错了,而不是像我在上面的示例中那样将 pdf_base64Str 保存到文件位置。我是这样保存的:

var pdf_base64= 'data:application/pdf;base64,'+pdf_base64Str;

这是错误的。

使用文件路径填充 PDF 视图:

<PDFView
    ref={(pdf)=>{this.pdfView = pdf;}}
    src={pdfLocation}
    style={styles.pdf}
/>
于 2016-08-06T13:37:02.053 回答
0

有一个新包可以处理通过 URL 获取(基于react-native-fetch-blob)和显示 PDF:react-native-pdf

于 2017-07-02T20:19:51.760 回答
0

删除 base64 字符串中的应用程序类型,它对我有用

var pdfBase64 = 'data:application/pdf;base64,'+base64Str;

var pdfBase64 = base64Str;
于 2021-05-19T13:48:52.743 回答