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

时间:2013-12-09 03:49:58

标签: javascript node.js socket.io

所以我正在使用文件输入的节点应用程序,该文件输入使用客户端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');
    });

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

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

谢谢!

2 个答案:

答案 0 :(得分:3)

您需要取出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');
});

答案 1 :(得分:0)

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