实际上,我是mongoDB和node.js的新手。我打算使用Mongoose将图像存储到mongodb中,用于一个小型实际项目。在阅读了一些教程和文档后,我发现mongodb像对待字符串一样对待图像文件,.txt和word文件。
以下是我所做的:
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
});
使用命令将文档保存到mongodb
result1.save();
要检查文档中的缓冲区是否正确,我将文档result1中的image值重写为图像文件并保存在本地文件夹中。成功了。
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,因此该图像可以是完美的,但是我没有这些云的帐户服务。