2016-12-15 6 views
0

私はいくつかのテキストフィールドとファイル入力を持つフォームを持っていますが、これは空ではありません。まずテキストフィールドを使っていくつかの操作を行います(データベースに追加する)ファイルをアップロードします。これは私のコードです。ファイルをアップロードしないでmulter access req.body

var multer = require('multer'); 
var getFields = multer(); 
router.post('/add',getFields.array(),function(req,res){ 
var artist = new ArtistModel({ 
      name : req.body.name.toLowerCase(), 
      description:req.body.description, 
      }); 

次に、私のDBとコールバックでアーティストを追加します。ファイルをアップロードします。しかし、私はファイルの入力があり、 "Unexpected fields"というエラーが出るため、単にgetFields.array()を使用することはできません.Array()を使用しないと、POSTリクエストボディを取得できません。とにかくフォームのテキストフィールドをenctype = "multipart/form-data"で取得してからファイルをアップロードするのですか?私はファイルをアップロードすることなく、テキストフィールドを取得することができたDave

更新#2 おかげで、私は成功したが、私はその後、 Iファイルをアップロードする方法を見つけ出すことができませんでした、私のデータベースに私のアーティストを追加しました私addToDbのコールバック関数で新しい変数を作成しました:しかしupload(req,res,err) doesntのを呼び出す

var storage = multer.diskStorage({ 
      destination: function (req, file, cb) { 
       //cb(null, 'artistsMedia/drake/songs') 
       var dir = 'artistsMedia/' + req.body.name.toLowerCase()+ '/images'; 
       mkdirp(dir,err => cb(err,dir)) 
      }, 
      filename: function (req, file, cb) { 
       cb(null, req.body.name.toLowerCase() +'-'+ file.fieldname +'-'+ Date.now() + path.extname(file.originalname)) //Appending extension 
      }, 

      }); 
      var upload = multer({ 
      storage: storage, 
      limits :{fileSize :52428800} 
      }).fields([{name:'Logo',maxCount:1},{name:'artistHome',maxCount:1},{name:'otherImgs',maxCount:10}]); 

が動作するように見えます。

+0

:あなたは何も提出されたファイル、使用multerのnone()機能がないと確信している場合

var multer = require('multer'); var getFields = multer(); router.post('/add',getFields.any(),function(req,res){ // any files, if sent, will be in req.files var artist = new ArtistModel({ name : req.body.name.toLowerCase(), description:req.body.description, }); }); 

RESTのやり方はアーティストを作成し、Locationレスポンスヘッダ(おそらく新しく作成されたオブジェクトを持つボディ)を持つ201 CREATEDレスポンスを返すことです。クライアントは、レスポンス本文またはレスポンスヘッダーを解析して新しいオブジェクトのIDを特定し、ファイルをPOSTするための*秒*要求を行います。 (または、最初のリクエストでファイルを送信してすぐにすべて実行できます)。 – Dave

答えて

1

multerのany()機能を試してみてください:あなたがアーティストを作成した後にファイルをアップロードしたい場合は

var multer = require('multer'); 
var getFields = multer(); 
router.post('/add',getFields.none(),function(req,res){ 
    // uploading files will cause an error 
    var artist = new ArtistModel({ 
    name : req.body.name.toLowerCase(), 
    description:req.body.description, 
    }); 
}); 
関連する問題