Преобразование longblob в image / jpeg или image / png в nodejs

#mysql #node.js #blob #buffer #multer

#mysql #node.js #большой двоичный объект #буфер #мультер

Вопрос:

Я пытаюсь сохранить некоторые изображения в mysql. Я использую express, multer для загрузки / скачивания изображения и мультера для обработки загрузки изображения соответственно. В моей таблице MySQL у меня есть тип столбца как longblob. В node js я пытаюсь сохранить изображение следующим образом:

 const avatar = req.file.buffer;
const avblob = Buffer.from(toArrayBuffer(avatar)).buffer;
  

В моем SQL-запросе я сохраняю буфер avblob как BINARY(avblob) . Значение отображается как [object ArrayBuffer] . Я пытаюсь получить доступ к этому изображению, используя его идентификатор, записать во временный файл и отправить его в качестве ответа. Вот что я пытаюсь сделать:

 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 a RowDataPacket из mysql, где ext либо .jpeg или .png , name случайное имя, avatar данные большого двоичного объекта изображения. Когда я отправляю файл обратно, ответ приходит как ArrayBuffer . Я попытался сохранить его в формате jpeg. Однако, когда я попытался открыть файл, он был поврежден.

Итак, как мне сохранить и извлечь большой двоичный объект изображения в nodejs? В моем подходе, что я не делаю или делаю неправильно? Наконец, при отправке файла обратно в качестве ответа, как я могу сообщить клиенту тип файла изображения, jpeg или png, чтобы они могли сохранить файл, используя правильное расширение?

РЕДАКТИРОВАТЬ 1

Я проверил Content-Type заголовок, и это image / jpeg. Попытка сохранить буфер в кодировке bas64 и получить его также не работает.

РЕДАКТИРОВАТЬ 2

Поскольку я не нашел решения, я теперь просто сохраняю файл в каталоге и сохраняю файл meta в базе данных. Пока это работает, но все равно было бы здорово выяснить, можно ли это сделать.

Комментарии:

1. У меня такая же проблема, вверх вверх