如何在保存到节点JS的服务器之前调整图像大小。 (multer本身,gm)我对任何选项开放

问题描述:

我试图在发布之前包含图像大小调整。 Multer习惯于接收照片。然后,使用输入的所有信息包括照片后。 我想在发布之前缩小图像的大小和质量。但是,这是行不通的。任何人都可以提出建议?如何在保存到节点JS的服务器之前调整图像大小。 (multer本身,gm)我对任何选项开放

const multer = require('multer');     
const storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
     cb(null, 'photo') 
    }, 
    filename: function (req, file, cb) { 
     cb(null, 'car-' + Date.now() + '.png') 
    }, 
}) 
const upload = multer({ storage: storage }) 
const gm = require('gm'); 

module.exports = (app,passport) => { 
    app.post('/sell', isLoggedIn, upload.any(), (req,res,next) => { 
     gm(req.files) 
      .resize(250, 250) 
      .gravity('Center') 
      .extent(width, height) 
      .noProfile() 
      .write('/photo/' + req.file.fieldname + '-' + Date.now()) 
     async.waterfall([ 
      function(callback) { 
       var newCar = new Car(); 
       newCar.owner = req.user._id; 
       newCar.make = req.body.make; 
       newCar.model = req.body.model; 
       newCar.year = req.body.year; 
       newCar.mileage = req.body.mileage; 
       newCar.price = req.body.price; 
       newCar.detail = req.body.detail; 
       newCar.locationProvince = req.body.locationProvince; 
       newCar.locationDistrict = req.body.locationDistrict; 
       //newCar.image = req.files; 
       newCar.save((err) => { 
        callback(err, newCar); 
       }); 
      }, 
      function (newCar, callback) { 
       User.update (
        { 
         _id: req.user._id 
        },{ 
         $push: {cars: newCar._id } 
        }, function (err,count) { 
         req.flash('success', 'success') 
         res.redirect('/') 
        } 
       ) 
      } 
     ]); 
    }); 
} 

首先,请指定错误或更多关于您的问题的内容。我认为你需要console.log - > res.files,它可能是一个数组。另外,如果它是正确的,请检查你的路径。最后一个,可能你不添加回调函数 - > write(path,cb)。

我现在可以解决它。但是,我不知道如何将已调整大小的图像保存为猫鼬。

app.post('/sell', isLoggedIn, upload.any(), (req, res, next) => { 
     async.waterfall([ 
      function(callback) { 
      console.log('files', req.files) 

      if (req.files.length > 0) { 
       req.files.map(function(file) { 
       var x = gm(file.path) 
        .resize(800, 640) 
        .gravity('Center') 
        //.extent(250, 250) 
        .noProfile() 
        .quality(80) 
        .write('./photo/resized/' + file.filename +'-800x640', function(err) { 
        if (err) { 
         console.log('error : ', err) 
        } 
        console.log(file.filename + ' resized!') 
        }); 
       }) 


       //console.log(req.files.path) 
       //console.log(req.files) 
       var newCar = new Car(); 
       newCar.owner = req.user._id; 
       newCar.make = req.body.make; 
       newCar.model = req.body.model; 
       newCar.year = req.body.year; 
       newCar.mileage = req.body.mileage; 
       newCar.price = req.body.price; 
       newCar.detail = req.body.detail; 
       newCar.locationProvince = req.body.locationProvince; 
       newCar.locationDistrict = req.body.locationDistrict; 
       newCar.image = req.files; 
       newCar.image_resized = x; 
       newCar.save((err) => { 
        callback(err, newCar); 
       }); 
       } 
      },