有人可以解释一下为什么解码Base64会导致pdf损坏吗? 我需要找到如何解码Base64并获取pdf的方法。 当我使用这项服务
https://emn178.github.io/online-tools/base64_decode_file.html
我能够通过Base64并顺利导出文件。
但是当我在node.js中做同样的事情时,我总是得到空的(破碎的)文件。 我尝试了不同的软件包,例如: js-base64, 阿托布
它们都不起作用,结果得到相同的空文件。
答案 0 :(得分:3)
您的PDF损坏了,因为:
Base64.decode()
函数将Base64值解码为UTF-8字符串。如
您会看到,这是错误的函数,因为您需要解码
值作为二进制数据。Base64.atob()
函数完全可以满足您的需求,但是您可以
在保存数据时犯了一个错误,因为
officially documentation,默认为fs.writeFile()
函数要保存二进制数据时,将数据另存为UTF-8。要正确解码Base64值并将其存储为二进制数据,您可以根据需要选择以下方法之一:
使用Base64.atob()
对Base64值进行解码,并在保存文件时指定二进制编码。仅在需要处理二进制数据时,此功能才有用。与其他方法不同,您必须安装并加载“ js-base64”模块。
var bin = Base64.atob(stringToDecode);
// Your code to handle binary data
fs.writeFile('result_binary.pdf', bin, 'binary', error => {
if (error) {
throw error;
} else {
console.log('binary saved!');
}
});
使用Buffer.from()
将Base64值转换为缓冲区,然后将其保存到文件中而不指定编码。仅在需要处理缓冲区时有用。
var buf = Buffer.from(stringToDecode, 'base64');
// Your code to handle buffer
fs.writeFile('result_buffer.pdf', buf, error => {
if (error) {
throw error;
} else {
console.log('buffer saved!');
}
});
如果不需要读取/修改二进制数据或缓冲区,只需在保存文件时指定编码选项即可。此方法是最简单的方法,可能是最快,最有效的内存。
fs.writeFile('result_base64.pdf', stringToDecode, 'base64', error => {
if (error) {
throw error;
} else {
console.log('base64 saved!');
}
});
答案 1 :(得分:1)
简单是最好的!只需使用fs
包将base64字符串保存到文件中,请记住您必须为base64
选项设置encoding
。
fs.writeFile('result_document.pdf', stringToDecode, 'base64', (error) => {
if (error) throw error;
console.log("Doc saved!");
});