2016-06-28 3 views
1

私が使ったすべての戦略に対して空の配列やオブジェクトを与えるreq.filesの表現形式です。ExpressとMulterのアップロードに関する問題 - req.filesは常に空です

と私のファイルフィールドは、multer内のmakemiddlewareオブジェクトによってファイルとして考慮されません。 (それをコンソール化し、フォーム提出はそこに行かない)。

私はミドルウェア、REQを通じてREQ処理の後、マルチパート/フォームデータとして

------WebKitFormBoundaryjcaOV7ABMw82oDRB 
Content-Disposition: form-data; name="username" 

Yash 
------WebKitFormBoundaryjcaOV7ABMw82oDRB 
Content-Disposition: form-data; name="email" 

[email protected] 
------WebKitFormBoundaryjcaOV7ABMw82oDRB 
Content-Disposition: form-data; name="password" 

yash 
------WebKitFormBoundaryjcaOV7ABMw82oDRB 
Content-Disposition: form-data; name="confirmPassword" 

yash 
------WebKitFormBoundaryjcaOV7ABMw82oDRB 
Content-Disposition: form-data; name="profilePicture" 

[object FileList] 
------WebKitFormBoundaryjcaOV7ABMw82oDRB-- 



//Middleware 

var uploadPath = path.join(__dirname, '../public/upload'); 
var upload = multer({ 
    dest: uploadPath, 
    rename: function (fieldname, filename) { 
     return filename.replace(/\W+/g, '-').toLowerCase() + Date.now(); 
    }, 
    onFileUploadStart: function (file) { 
     console.log(file.fieldname + ' is starting ...'); 
    }, 
    onFileUploadData: function (file, data) { 
     console.log(data.length + ' of ' + file.fieldname + ' arrived'); 
    }, 
    onFileUploadComplete: function (file) { 
     console.log(file.fieldname + ' uploaded to ' + file.path); 
    } 
}); 


//Route 

    router.route('/user/signmeup') 
     .post(function(req, res){ 
     upload.array('profilePicture', 2)(req, res, (err) => { 
      console.dir(req.headers['content-type']); 
      if (err) { 
      console.log('err', err); 
      }else{ 
      console.log('coming here'); console.log(req.files); console.log(req.body); 
      var reg = new Registration(); 
      let args = { body : req.body, session : req.session }; 
      reg.applyForMembership(args, function(err, result){ 
       res.json(result); 
      }); 
      } 
     }); 
     }); 

を慰め[「コンテンツタイプ」]私のクライアント側の要求ペイロードは、以下の本やサービサー側req.headersのように見えてい.bodyとreq.filesは常に

coming here 
[] 
{ username: 'Yash', 
    email: '[email protected]', 
    password: 'yash', 
    confirmPassword: 'yash', 
    profilePicture: '[object FileList]' } 

の下に、次のように印刷していることは、それはフロントエンドのフォーム処理および/またはmulterは私のアプリで設定されている方法の問題です。

これについてのご意見をお待ちしております。ここ数日間苦労していますが、何も問題なく動作しているようです。

おかげで、私は時間のためにこれで苦しんでいた Gjを

+0

まだ解決策はありますか?もしそうなら、あなたは答えを加えることができますか? – Illep

答えて

2

OK - 私は最終的にそれが働いて得ることができました。

は、問題は、私はその後もこの<input type='file' name='myFileName'>

のように、私の<input type='file' />タグに「名前」属性を追加しなければならなかったことであることが判明 - 私が持っていた - 私は私のmulter設定であることを確認していましたまったく同じ名前の私の配列()関数呼び出しの「myFileName」 - このような:

router.post('/', multer({dest:'./uploads'}).array('myFileName', 1), function(req, res, next) {}); 

は、この問題を修正するために起こった。これは役立ちます

願っています!

0

req.fileを正しく取得するには、まず.post()のパラメータを正しい方法で設定する必要があります。

router.route('/user/signmeup').post(upload.array('profilePicture', 2), 
function(req, res){ 
     console.dir(req.headers['content-type']); 
     if (err) { 
      console.log('err', err); 
     }else{ 
      console.log('coming here'); 
      console.log(req.files); 
      console.log(req.body); 
      var reg = new Registration(); 
      let args = { body : req.body, session : req.session }; 
      reg.applyForMembership(args, function(err, result){ 
      res.json(result); 
      }); 
     } 
}); 
関連する問題