gpt4 book ai didi

react-native - 如何将pdf保存到android文件系统然后查看PDF - react-native

转载 作者:行者123 更新时间:2023-12-04 02:56:47 27 4
gpt4 key购买 nike

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

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

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

saveFile() 函数
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

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

最佳答案

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

解决方案

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”库更好地记录并且更容易理解。 ( Check out its FileSystem API documentation )

接收 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 View :
<PDFView
ref={(pdf)=>{this.pdfView = pdf;}}
src={pdfLocation}
style={styles.pdf}
/>

关于react-native - 如何将pdf保存到android文件系统然后查看PDF - react-native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38662309/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com