2016-08-05 7 views
2

このエラーを回避するために私の頭を包み込むのはなぜですか?私はそれといくつかのポストを見たが、彼らはすべて異なるケースであり、まったく一致しない。だから助けを感謝します。 何をアップロードしたいのですか? しかし、私はファイルをアップロードするそれはちょうど1つの作品です。 しかし、複数のファイルをアップロードしようとすると、動作しません。 私に答えてくれますか?Node.js 344エラー送信後にヘッダーを設定できない

router.post('/contents/insert/upload', ensureAuthenticated, function(req, res, next) { 
 
\t 
 
\t var form = new formidable.IncomingForm(); 
 
\t 
 
\t form.parse(req); 
 
// \t form.on("fileBegin", function (name, file){ 
 
// \t \t console.log('upload come on3'); 
 
// \t \t 
 
// }); 
 
    form.on("file", function (name, file){ 
 
     fs.readFile(file.path, function(error, data){ 
 
     \t var filePath = __dirname + '/../public/uploads/' + file.name; 
 
     \t 
 
     \t fs.writeFile(filePath, data, function(error){ 
 
     \t \t if(error){ 
 
     \t \t \t throw err; 
 
     \t \t \t //res.redirect('back'); 
 
     \t \t }else { 
 
     \t \t \t res.redirect('back'); 
 
     \t \t } 
 
     \t }); 
 
     }); 
 
    }); 
 

 
});
<form action="/adm/contents/insert/upload" method="post" enctype="multipart/form-data" > 
 
\t \t \t  <!-- <input type="file" name="file" /> 
 
\t \t \t  <input type="submit" /> --> 
 
\t \t \t \t <div class="file-field input-field"> 
 
\t \t \t  \t <div class="btn"> 
 
\t \t \t \t \t \t <span>input images</span> 
 
\t \t \t \t  \t <input type="file" name="file" multiple> 
 
\t \t \t  \t </div> 
 
\t \t \t  \t <div class="file-path-wrapper"> 
 
\t \t \t   \t <input class="file-path validate" type="text"> 
 
\t \t \t  \t </div> 
 
\t \t \t  </div> 
 
\t \t \t  <input type="submit" class="btn waves-effect waves-light" value="upload" /> 
 
\t \t \t </form>

答えて

2

fileイベントは、アップロード内のすべてのファイルに対してトリガされますので、最終的にはあなたのコードは、アップロードされた各ファイルに対してres.redirect()を発行します。これにより、エラーが発生します(リダイレクトを発行するか、要求の有効期間内に応答を返すことができます)。

代わりに、あなたはendイベントをリッスンし、そこにリダイレクトを発行します:

form.on("file", function (name, file) { 
    ...handle the file copy here, but don't call `res.redirect()` anywhere... 
}); 

form.on("end", function() { 
    res.redirect('back'); 
}); 

FWIW、あなたの代わりに、強敵のuploadDirオプションを設定する、またはfs.rename()を使用するように私には思えますアップロード後にファイルを読み込み、それを新しい場所に書き込んでください(効率的ではありません)。

+0

Iは他のコード} { \t \t \t form.on( "終了"、関数(){ \t \t \t \t res.redirect( 'バック'); \t \t \t \tを})を追加します。 \t \t}あなたが書いたもの。それは多くのおかげで働いています。しかし、なぜブラウザが読み込みを続けているのかわからない...それが挿入されていても、 –

+0

あなたは 'end'ハンドラを_inside_に追加するべきではありません。明確にするために私の答えを編集します。 – robertklep

+0

ありがとう!それは明確に働いている!!あなたの答えを選んだ –

関連する問題