Конвертировать longblob в image / jpeg или image / png в nodejs - PullRequest
1 голос
/ 12 апреля 2019

Я пытаюсь сохранить некоторые изображения в 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]. Я пытаюсь получить доступ к этому изображению, используя его идентификатор, записать во временный файл и отправить его в ответ. Вот что я пытаюсь сделать:

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

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

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

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

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

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

...