我正在尝试将一些图像保存到mysql中。我正在使用express, multer
上传/下载图片和multer,分别用于处理图片上传。在我的mySQL表中,列类型为longblob。在节点js中,我尝试通过以下方式保存图像:
const avatar = req.file.buffer;
const avblob = Buffer.from(toArrayBuffer(avatar)).buffer;
在我的SQL查询中,我将缓冲区avblob
保存为BINARY(avblob)
。该值显示为[object ArrayBuffer]
。我正在尝试使用其ID访问此图像,写入一个临时文件并将其作为响应发送。这是我想要做的:
fs.writeFileSync(__dirname+avatar[0].name+avatar[0].ext, avatar[0].avatar);
res.sendFile(__dirname+avatar[0].name+avatar[0].ext, (err) => {
if(err) {
console.error(err);
return res.status(500)
.json({
status: 500,
message: 'Internal Error'
});
}
res.status(200)
.json({
status: 200,
message: 'Image Sent'
});
});
其中avatar
是mysql的RowDataPacket
,其中ext
是.jpeg
或.png
,name
是随机名称,{{ 1}}是图像Blob数据。当我发回文件时,响应以avatar
的形式出现。我尝试将其保存为jpeg文件。但是,当我尝试打开文件时,文件已损坏。
那么,如何在Node.js中保存和检索图像Blob?在我的方法中,我没有做什么或做错了什么?最后,当将文件发送回作为响应时,如何通知客户端jpeg或png图像文件类型,以便他们可以使用适当的扩展名保存文件?
编辑1
我检查了ArrayBuffer
标头,它是图片/ jpeg。尝试将缓冲区保存为bas64编码并检索它也无效。
编辑2
由于找不到解决方案,因此我现在只是将文件保存在目录中,并将文件meta保存在数据库中。它目前正在运行,但是,如果能够做到这一点,仍然很重要。