#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. У меня такая же проблема, вверх вверх