在NodeJs中使用中间件调整图像大小

时间:2018-08-02 15:11:23

标签: node.js mongodb image-processing

我正在尝试构建一个我想存储图像的REST API。我正在使用Node,Express和MongoDB。现在,为了存储图像,我正在使用gridfs,multer,因为我想将图像存储在数据库中。

现在该部分运行良好。这是代码

const storage = new GridFsStorage({
url: MongoURL,
file: (req, file) => {
  return new Promise((resolve, reject) => {
    crypto.randomBytes(16, (err, buf) => {
      if (err) {
        return reject(err);
      }
      const filename = buf.toString('hex') + path.extname(file.originalname);
      const fileInfo = {
        filename: filename,
        bucketName: 'images'
      };
          resolve(fileInfo);
        });
      });
    }
  });

const upload = multer({ storage });

router.put('/update/profile-picture', checkAuth, 
upload.single('profile_picture'),(req,res) => {
   console.log(req.file);
   res.json('Image Upload');
});

由于代码很长,我没有上传整个代码。

现在在存储图像之前,我想压缩图像以节省空间。因此,我决定使用jimp(我愿意使用任何东西)。

所以我认为我需要使用中间件。那么,如何制作一个可以调整图像大小并压缩图像的中间件呢?

1 个答案:

答案 0 :(得分:1)

我正在使用带有imageimage的multer,它工作得很好,但是您必须先写入文件:

const easyimage     = require('easyimage');

app.use(multer({
  dest:       "./public/img",
  limits:     { fileSize: 3* 1024 * 1024}, //3mb
  inMemory:   true
}));


app.use(function(req, res, next){
 // write file

  fs.writeFile( __dirname + "/../" + req.files.file.path, req.files.file.buffer, function(err) {
     return next();
  });

});


app.use(function(req, res, next)[

     easyimage.resize({
        src:            __dirname+"/../"+req.files.file.path,
        dst:            __dirname+"/../"+req.files.file.path,
        width:          640,
        height:         249,
        quality:        100,
        ignoreAspectRatio:  true

    }).then((file) => {

     return next();

    });
});