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

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

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

我正在寻找最低的解决scheme,我打算在以后增加任何所需的复杂性。

谢谢!

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

如果要将图像作为适当的图像文件存储在服务器上,则需要将图像转换回二进制格式。 要做到这一点,你需要parsing并删除base64头“data:image / jpeg; base64”,创build一个编码设置为“base64”的缓冲区 ,并将其存储在文件系统中,并从头中parsing出适当的文件扩展名。