2017-01-20 8 views
0

MEANスタックを使用してイメージとそのタイトルをアップロードするには、ng-file-uploadを使用しています。現在、イメージを保存できますが、送信されたデータを取得できません。ng-file-uploadを使用してフォームデータを取得する

コントローラー:

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]; 
    } 
} 

ルート:

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; 

はどうすればルートでの私の形式の文字列を得ることができますか?

答えて

0

upload.single(...)は高速リ​​クエストハンドラです。複数のリクエストハンドラは、コード内の 'router.post'関数などのルータマッチャーで使用できます。あなたが複数の要求を使用し..where

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

したがって、代わりに次のようにあなたが以前に行ったように、単一の要求ハンドラを持つの:

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

あなたは、このようなルーターを書き換えることができますハンドラー。

ことを確立するために、あなたはあなたの最初のルータマッチャ外multerインスタンスを定義する必要がありますし、あなたのファイルは、最終的には次のようになります。

//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; 
関連する問題