无法使用NodeJ从MongoDB检索图像

时间:2019-07-03 16:59:26

标签: node.js database mongodb image mongoose

实际上,我是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,因此该图像可以是完美的,但是我没有这些云的帐户服务。

0 个答案:

没有答案