Mysql 在nodejs中将longblob转换为image/jpeg或image/png
我正在尝试将一些图像保存到mysql中。我使用Mysql 在nodejs中将longblob转换为image/jpeg或image/png,mysql,node.js,blob,buffer,multer,Mysql,Node.js,Blob,Buffer,Multer,我正在尝试将一些图像保存到mysql中。我使用express、multer分别上传/下载图像和处理图像上传的multer。在我的mySQL表中,列类型为longblob。在node js中,我尝试以以下方式保存图像: const avatar = req.file.buffer; const avblob = Buffer.from(toArrayBuffer(avatar)).buffer; 在我的SQL查询中,我将缓冲区avblob保存为BINARY(avblob)。该值显示为[objec
express、multer
分别上传/下载图像和处理图像上传的multer。在我的mySQL表中,列类型为longblob。在node 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
是随机名称,avatar
是图像块数据。当我发回文件时,响应以ArrayBuffer
的形式出现。我试着将它保存为jpeg文件。但是,当我试图打开该文件时,它已损坏
那么,如何在nodejs中保存和检索图像blob呢?在我的方法中,我没有做或做错事的是什么?最后,在将文件作为响应发送回时,我如何告知客户机图像文件类型、jpeg或png,以便他们使用适当的扩展名保存文件
编辑1
我检查了内容类型
标题及其图像/jpeg。尝试将缓冲区保存为bas64编码并检索它也不起作用
编辑2
由于我没有找到解决方案,我现在只是将文件保存在一个目录中,并将文件元保存在数据库中。它目前正在工作,但是,如果能够解决这个问题,那将是一件非常棒的事情。我也有同样的问题,直到最后