2017-08-29 6 views
0

Je crée un service Web pour télécharger l'image avec du texte & Le type de fichier doit être uniquement de type image et obligatoire. J'utilise multer pour télécharger le fichier du facteur. Je suis sélectionner des données de forme de type de corps puis obtenir des données de formulaire. Est-il possible d'écrire du code de déplacement de fichier dans le contrôleur.Comment valider l'image d'un type de fichier quand l'envoyer depuis un facteur dans nodejs?

code Route est

var multer = require('multer'); 
var uploadPic = multer({dest:'public/uploads/profile'}); 

router.post('/v1/insertUser',uploadPic.any(),userController.saveUser); 

Code Controller est, j'utilise sequelize pour insérer des données.

userController.saveUser = function(req,res){ 
    var params = req.body; 
    req.checkBody('first_name', 'The first name is required!').notEmpty(); 
    req.checkBody('email', 'The email is required!').notEmpty(); 
    req.checkBody('email', 'The email format is incorrect!').isEmail(); 
    req.checkBody('boltt_code', 'The boltt code is required!').notEmpty(); 

    var errors = req.validationErrors(); 
    var userError = Array(); 
    if(errors){ 
     if(errors.length){ 
      for(var key in errors){ 
       userError.push({ 
        'key' : errors[key].param, 
        'message' : errors[key].msg 
       }); 
      } 
     } 
     return res.send({message: userError,status:'Failure',response:200,data:[]}); 
    } 
    user.findOrCreate({ 
     where:{ 
      first_name: helper.trimInputValue(params.first_name), 
      email: helper.trimInputValue(params.email), 
      boltt_code: helper.trimInputValue(params.boltt_code) 
     }, 
     defaults:{ 
      first_name: helper.trimInputValue(params.first_name), 
      middle_name : '', 
      last_name : '', 
      email: helper.trimInputValue(params.email), 
      boltt_code: helper.trimInputValue(params.boltt_code), 
      image : req.files.filename, 
     } 
    }) 
    .spread(function(user, created) { 
     var msg = ''; 
     if(created){ 
      msg = 'User inserted successfully!'; 
     }else{ 
      msg = 'User already exist!'; 
     } 
     res.send({ 
      message : msg, 
      status:'Success', 
      response:200, 
      data : user 
     }); 
    }).catch(Sequelize.ValidationError,function(err){ 
     data = err.errors; 
     var userError = Array(); 
     if(data.length){ 
      for(var key in data){ 
       userError.push({ 
        'key' : data[key].path, 
        'message' : data[key].message 
       }); 
      } 
     } 
     res.send({ 
      message : userError, 
      status : 'Failure', 
      response:200, 
      data:[] 
     }); 
    }).catch((err) => { 
     res.send({ 
      message : err, 
      status:'Failure', 
      response : 500, 
      data:[] 
     }); 
    }); 
}; 

Répondre

0
var multer = require('multer'); 

var storage = multer.diskStorage({ 
    destination : function(req,file,cb){ 
     cb(null,'public/uploads/profile/'); 
    }, 
    filename : function(req,file,cb){ 
     if(!file.originalname.match(/\.(png)$/)){ 
      var err = new Error(); 
      err.code = 'filetype'; 
      return cb(err); 
     }else{ 
      cb(null,file.originalname + '_' + Date.now()); 
     } 
    } 
}); 

var upload = multer({ 
    storage : storage, 
    limits : {fileSize : 10000000} 
}).single('image'); 

Ce code fonctionne très bien.