使用imagemin压缩图像并存储在mongodb中

时间:2014-11-17 16:45:22

标签: node.js mongodb image-processing express

我试图检索已发布到我们的nodejs服务器的图像,压缩它然后将其存储在mongodb中。我正在使用正在工作的imagemin,即它可以获取传入的图像,压缩它并将其存储到静态目标文件夹。但是,我想获取imagemin进程的输出并将该图像存储在mongo而不是目标文件夹中!

这是逻辑坐落在multer中间件内;

app.use(multer({
    dest : './static/uploads/',
    limits : {...
    rename : function(fieldname, filename) {....
    onFileUploadComplete : function(file) {

    //var imagemin = new Imagemin().src(file.path).dest('./static/uploads/').use(compressionType); 
    var imagemin = new Imagemin().src(file.path).use(compressionType);
     imagemin.run(function(err, files) {        
         if (err) {             
           return next(err);        
         }
        console.log('Files optimized successfully!');   });
        // DO SOME LOGIC HERE TO STORE IMAGE(S) TO MONGO
    }
};

从阅读imagemin的FAQ,run()函数是处理图像的正确位置吗?这是存储在目标文件夹中的图像吗?

示例包含版本的package.json;

{
    "name": "test-project",
    "description": "Another Test",
    "version": "0.0.1",
    "engines": {
        "node": ">= 0.10.x"
    },
    "private": true,
    "dependencies": {
        "express": "3.x",
        "multer": "0.x",
        "imagemin": "3.0.0",
        "mongoose": "~3.8.8",
        "mongoose-thumbnail": "0.0.1",
        "mongoose-file": "0.0.2"        
    }
}

感谢任何帮助或指示。

Ĵ

1 个答案:

答案 0 :(得分:1)

这可能不是您想要的答案 - 但您可能想要在MongoDB中存储图像。数据库系统实际上并不意味着处理大型二进制文件(如图像)的存储。这是因为存储图像会占用大量磁盘空间,并且会大大减慢查询速度。

如果您要构建生产应用程序,您可能希望将图像文件存储到像Amazon S3这样的文件存储服务中:http://aws.amazon.com/s3/您可以使用多个库来执行此操作,包括官方支持的AWS节点库:http://aws.amazon.com/sdk-for-node-js/

现在 - 如果确实想要在MongoDB中存储图像,你可以这样做:

var imagemin = new Imagemin().src(file.path).use(compressionType);
imagemin.run(function(err, files) {        
  if (err) {             
    return next(err);        
  }
  for (var i = 0; i < files.length; i++) {
    var model = new MyMongooseModel({
      image: files[i].contents,  // files[i].contents is a Buffer that contains the image file's contents
      ...
    });
    model.save(function(err) {
      if (err) {
        return next(err);
      }
    });
  }
});

这要求您使用Mongoose库来处理MongoDB:http://mongoosejs.com/