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

Node.js 使用imagemin压缩图像并存储在mongodb中,node.js,mongodb,image-processing,express,Node.js,Mongodb,Image Processing,Express,我试图检索一个已经发布到我们的nodejs服务器的图像,压缩它,然后将它存储在mongodb中。我使用的imagemin正在工作,也就是说,它可以获取传入的图像,将其压缩并存储到静态目标文件夹中。但是,我想获取imagemin进程的输出并将该图像存储在mongo中,而不是目标文件夹中 这是位于multer中间件内部的逻辑 app.use(multer({ dest : './static/uploads/', limits : {... rename : function

我试图检索一个已经发布到我们的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的常见问题解答,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"        
    }
}
任何帮助或指导都将不胜感激


这可能不是您想要的答案,但您可能不想在MongoDB中存储图像。数据库系统并不是真正用来处理像图像这样的大型二进制文件的存储。这是因为存储图像将占用大量磁盘空间,并大大降低查询速度

如果您正在构建一个生产应用程序,您可能会转而考虑将图像文件存储到文件存储服务(如Amazon S3)中:您可以使用许多库来实现这一点,包括官方支持的AWS节点库:

现在——如果您真的想在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);
      }
    });
  }
});
var-imagemin=new-imagemin().src(file.path);
运行(函数(错误,文件){
如果(错误){
返回下一个(错误);
}
对于(var i=0;i

这要求您使用Mongoose库来处理MongoDB:

Ya,它只是用于POC。更新后的代码如下所示<代码>var base64Image=新缓冲区(img.bin,“base64”);res.writeHead(200,{'Content-Length':base64Image.Length,'Content-Type':'image/png'});res.end(base64Image)其中img.bin只是mongodb模型中的字符串类型。