解码Base64 pdf给出损坏的文件

时间:2019-06-06 18:20:05

标签: node.js base64 decoding

有人可以解释一下为什么解码Base64会导致pdf损坏吗? 我需要找到如何解码Base64并获取pdf的方法。 当我使用这项服务

https://emn178.github.io/online-tools/base64_decode_file.html

我能够通过Base64并顺利导出文件。

但是当我在node.js中做同样的事情时,我总是得到空的(破碎的)文件。 我尝试了不同的软件包,例如: js-base64, 阿托布

它们都不起作用,结果得到相同的空文件。

链接到我的代码: https://repl.it/@afiliptsov/FaroffGloriousFormula

2 个答案:

答案 0 :(得分:3)

您的PDF损坏了,因为:

  1. 根据officially documentationBase64.decode()函数将Base64值解码为UTF-8字符串。如 您会看到,这是错误的函数,因为您需要解码 值作为二进制数据。
  2. Base64.atob()函数完全可以满足您的需求,但是您可以 在保存数据时犯了一个错误,因为 officially documentation,默认为fs.writeFile() 函数要保存二进制数据时,将数据另存为UTF-8。

要正确解码Base64值并将其存储为二进制数据,您可以根据需要选择以下方法之一:

require('js-base64')。Base64.atob()

使用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

使用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!");
});