节点:将 base64 源写入图像文件

Node: Writing a base64 source to an image file

本文关键字:图像 文件 base64 节点      更新时间:2024-05-17

所以我正在开发一个带有文件输入的节点应用程序,该应用程序使用客户端 js 从图像中获取 base64 dataURI 代码并将其作为套接字消息发送到服务器。

生成的 base64 消息采用以下格式:

data:image/jpeg;base64,/9j/4QCcRXhpZgAASUkqAAgAAAA ... 

在节点/服务器端,我想将此消息另存为图像文件:

    fs.writeFile(newFilePath, src, function (err) {
      if (err) throw err;
      console.log('It''s saved! ' + entryID + '.' + fileType + ''n');
      socket.emit('sendFileSuccess', entryID + ''n');
    });

运行后,文件确实会以相似的文件大小保存到正确的位置。但是当我使用预览打开该文件时,该文件不是有效的图像("它可能已损坏或使用预览无法识别的文件格式。

正在寻找最小的解决方案,我计划稍后添加任何所需的复杂性。

谢谢!

您需要

取出data:image/jpeg;base64,部分。

var data = src.replace(/^data:image'/png;base64,/,'');
fs.writeFile(newFilePath, data, 'base64', function(err) {
  if (err) throw err;
  console.log('It''s saved! ' + entryID + '.' + fileType + ''n');
  socket.emit('sendFileSuccess', entryID + ''n');
});
如果要将

图像作为正确的图像文件存储在服务器上,则需要将图像转换回二进制格式。为此,您需要解析并删除 base64 标头"data:image/jpeg;base64,",创建一个编码设置为"base64"的缓冲区,并将其存储在文件系统中,并从标头解析出适当的文件扩展名。