2017-01-20 1 views
0

J'utilise ng-file-upload pour télécharger des images et leur titre en utilisant la pile MEAN. Actuellement, je peux enregistrer l'image, mais je suis incapable d'aller chercher les données envoyées.Obtention de données de formulaire lors de l'utilisation de ng-file-upload

Controller:

module.exports = function ($scope, Upload) { 
    let vm = this; 

    vm.uploadImage = function() { 
     if (vm.file) { 
      vm.file.upload = Upload.upload({ 
       url: '/uploads/gallery', 
       method: 'POST', 
       data: { title: vm.title }, 
       file: vm.file 
      }); 

      vm.file.upload.then(function (response) { 
       $timeout(function() { 
        vm.file.result = response.data; 
       }); 
      }, function (response) { 
       if (response.status > 0) { } 
       vm.errorMsg = response.status + ': ' + response.data; 
      }, function (evt) { 
       vm.file.progress = Math.min(100, parseInt(100.0 * 
        evt.loaded/evt.total)); 
      }); 
     } 
    } 

    vm.browseImage = function (file, errFiles) { 
     vm.file = file; 
     vm.errFile = errFiles && errFiles[0]; 
    } 
} 

Route:

router.post('/gallery', (req, res) => { 
    //multers disk storage settings 
    let folder = './public/assets/images/gallery/'; 
    let filename = ''; 

    let imageLocation = ''; 
    let thumbLocation = ''; 

    let response = ''; 

    //console.log(req.form);------throws undefined 
    //console.log(req.body);------throws undefined 

    let storage = multer.diskStorage({ 
     destination: function (req, file, cb) { 
      cb(null, folder) 
     }, 
     filename: function (req, file, cb) { 
      var datetimestamp = Date.now(); 
      filename = file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length - 1]; 
      imageLocation = folder + filename; 
      thumbLocation = folder + 'thumb' + filename; 
      cb(null, filename) 
     } 
    }); 

    //multer settings 

    let upload = multer({ 
     storage: storage 
    }).single('file'); 

    upload(req, res, function (err) { 
     if (err) { 
      res.json({ error_code: 1, err_desc: err }); 
      return; 
     } 
     else { 
      response = { fileCreated: true }; 
     } 
    }) 

}); 

module.exports = router; 

Comment puis-je obtenir la chaîne dans ma forme dans la route?

Répondre

0

upload.single (...) est un gestionnaire de requêtes express. Plusieurs gestionnaires de requêtes peuvent être utilisés avec un routeur de routage comme la fonction 'router.post' dans votre code.

Ainsi, au lieu d'avoir un seul gestionnaire de requêtes unique que vous avez déjà ne comme suit:

router.post('/gallery', (req, res) => { 
... 
... 
} 

Vous pouvez réécrire votre routeur comme ceci:

router.post('/gallery', upload.single('file'), (req, res) => { 
    ... 
    ... 
} 

..where vous utilisez une demande multiple les gestionnaires.

Afin d'établir que, vous devez définir par exemple multer en dehors de votre routeur initial matcher et votre fichier doit éventuellement ressembler à ceci:

//i assume you have these in your file 
const express = require("express"); 
const multer = require("multer"); 
let router = express.Router(); 

//multers disk storage settings 
const folder = './public/assets/images/gallery/'; 
const filename = ''; 
const imageLocation = ''; 
const thumbLocation = ''; 

const storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
     cb(null, folder) 
    }, 
    filename: function (req, file, cb) { 
     var datetimestamp = Date.now(); 
     this.filename = file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length - 1]; 
     this.imageLocation = folder + filename; 
     this.thumbLocation = folder + 'thumb' + filename; 
     cb(null, filename) 
    } 
}); 

//multer settings 
const upload = multer({ 
    storage: storage 
}); 

router.post('/gallery', upload.single(), (req, res) => { 
    console.log(res.json); 
}); 

module.exports = router;