На самом деле, я новичок в mongoDB и node.js.Я планирую хранить изображения в mongodb, используя Mongoose для небольшого практического проекта.Прочитав некоторые учебники и документацию, я обнаружил, что mongodb обрабатывает файл изображения, .txt, файл слова так же, как и строку.
Вот что я сделал:
1) При сохранениичасть: моя схема
const detectResult = new mongoose.Schema({
camID: String,
location: [String, String],
time: String,
image: Buffer
});
const Test = mongoose.model('Result', detectResult);
Я открыл изображение и сохранил его в буфере, вызвав «buffimage». Затем создаю документ для просмотра в базе данных
const result1 = new Test ({
camID: 'cam1',
location: ['12345','12345'],
time: '12:00',
image: buffimage
});
, используя команду для сохранения документаto mongodb
result1.save();
Чтобы проверить правильность буфера в документе, я переписал значение изображения в документе result1 в файл изображения и сохранил в локальной папке.Это успех.
var filename = "image";
var buffer = new Buffer.alloc(0);
buffer = result1.image;
var fileContent = fs.writeFile(filename, buffer, (err) => {
if (err) throw err;
console.log('File Saved');
});
Можно предположить, что изображение документа правильно сохранено в базе данных.Размер буфера изображения составляет 921600.
2) На извлекаемой части: я также создаю схему, такую же, как схема сохранения части.Затем найдя сохраненный выше документ,
const imageResult = Test
.findOne({time : '12:00'}, 'image')
//rewrite image
var filename = "image";
var buffer = new Buffer.alloc(0);
buffer = imageResult.image;
console.log(buffer.length);
var fileContent = fs.writeFile(filename, buffer, (err) => {
if (err) throw err;
console.log('File Saved');
Изображение не может быть успешно записано;размер буфера для найденного изображения - 973368, больше, чем исходный.
Я ожидаю, что размер изображения составляет 921600 B, но он всегда больше, поэтому изображение нельзя переписать корректно.Интересно, а то, как я поступаю, может быть правильным или нет?Как я могу получить этот тип изображения из mongodb?
Я также ищу некоторые другие методы, один из которых - сохранение изображения в сервисе хранения, таком как AWS S3, Azure, затем сохранение только URL-адреса этого изображения, поэтомуизображение может быть идеально, но у меня нет ни одной учетной записи для этих облачных сервисов.