解码 node.js 中的 Base64 字符串

Decode Base64 string in node.js

我正在尝试解码表示存储在数据库中的图像的 base64 字符串。 我尝试了 SO 上提供的许多库和解决方案,但我仍然无法正确解码图像。特别是,使用以下代码:

var img = new Buffer(b64, 'base64').toString('ascii');

除了第一个字节外,我得到了类似的二进制表示。 这是 base64 字符串的初始部分:

/9j/4RxVRXhpZgAASUkqAAgAAAANADIBAgAUAAAAqgAAACWIBAABAAAAiwYAABABAgAIAAAAvgAA

这里是原始图像的前 50 个字节:

ffd8ffe11c5545786966000049492a00080000000d003201020014000000aa00000025880400010000008b06000010010200

这是我用 javascript:

得到的字符串的前 50 个字节
7f587f611c5545786966000049492a00080000000d0032010200140000002a00000025080400010000000b06000010010200

如你所见,除了前三个字节和中间的几个字节外,这两个字符串完全相同。
有人可以帮助我理解为什么会发生这种情况以及如何解决吗?谢谢

问题是您正在尝试将二进制数据转换为 ASCII,这很可能意味着数据丢失,因为 ASCII 仅包含值 0x00-0x7F。因此,当转换发生时,所有大于 0x7F 的字节都以 0x7F 为上限。

如果改为这样做,您会看到数据与原始图像的前 50 个字节匹配:

console.log(Buffer.from(b64, 'base64').toString('hex'));

但是如果你想保持二进制数据的完整性,只需将其作为 Buffer 实例而不调用 .toString(),因为许多处理二进制数据的函数都可以处理 Buffers(例如 fs核心模块)。