2017-01-20 3 views
0

Ich verwende ng-Datei-Upload, um Bilder und den Titel mit dem MEAN-Stapel hochzuladen. Momentan kann ich das Bild speichern, aber ich kann die gesendeten Daten nicht abrufen.Erhalten von Formulardaten während der Verwendung von ng-Datei-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; 

Wie kann ich die Zeichenfolge in meiner Form in der Route bekommen?

Antwort

0

upload.single (...) ist ein Express-Request-Handler. Mehrere Anforderungshandler können mit einem Router-Matcher verwendet werden, z. B. die Funktion "router.post" in Ihrem Code.

Statt also nur einen einzigen Request-Handler von, wie Sie vorher haben wie folgt:

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

Sie Ihren Router wie folgt umschreiben kann:

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

..wo Sie mehrere Anfrage verwenden Handler.

//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; 
:

Um das zu schaffen, sollten Sie multer Instanz außerhalb Ihres ersten Router Matcher und Ihre Datei sollte schließlich so aussehen definieren

Verwandte Themen