2017-10-18 12 views
0

J'ai essayé d'inclure le redimensionnement de l'image avant de poster. Multer est habitué à recevoir des photos. Ensuite, après avoir utilisé l'entrée, toutes les informations, y compris les photos. Je voudrais réduire la taille et la qualité de l'image avant de poster. Cependant, ça ne marche pas. Quelqu'un peut-il donner des suggestions?Comment redimensionner l'image avant de l'enregistrer sur le serveur pour Node JS. (multer lui-même, gm) Je suis ouvert à toute option

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('/') 
        } 
       ) 
      } 
     ]); 
    }); 
} 

Répondre

0

Tout d'abord, veuillez spécifier une erreur ou quelque chose de plus à propos de votre problème. Je pense que vous avez besoin de console.log -> res.files, ce pourrait être un tableau. Aussi, vérifiez votre chemin en écriture si c'est correct. Et le dernier, probablement vous n'ajoutez pas de fonction de rappel -> write (chemin, cb).

0

Je peux le résoudre maintenant. Mais, je ne sais pas comment sauvegarder l'image qui a été redimensionnée à mangouste.

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); 
       }); 
       } 
      },