在nodejs中将longblob转换为image / jpeg或image / png

时间:2019-04-11 23:02:26

标签: mysql node.js blob buffer multer

我正在尝试将一些图像保存到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.pngname是随机名称,{{ 1}}是图像Blob数据。当我发回文件时,响应以avatar的形式出现。我尝试将其保存为jpeg文件。但是,当我尝试打开文件时,文件已损坏。

那么,如何在Node.js中保存和检索图像Blob?在我的方法中,我没有做什么或做错了什么?最后,当将文件发送回作为响应时,如何通知客户端jpeg或png图像文件类型,以便他们可以使用适当的扩展名保存文件?

编辑1

我检查了ArrayBuffer标头,它是图片/ jpeg。尝试将缓冲区保存为bas64编码并检索它也无效。

编辑2

由于找不到解决方案,因此我现在只是将文件保存在目录中,并将文件meta保存在数据库中。它目前正在运行,但是,如果能够做到这一点,仍然很重要。

0 个答案:

没有答案