私は Node.js の初心者で、Express と Busboy-Connect を使用して、wav ファイルのみの単純なファイル アップロード フォームを作成しています。これが私がやろうとしていることです: - アップロードを開始します - MIME タイプが wav でない場合は、エラー ページにリダイレクトします - そうでない場合: サーバーにファイルを書き込み、リダイレクトします。
MIME タイプが有効な場合はすべて正常に動作しますが、そうでない場合はリダイレクトできず、ブラウザがハングアップして最終的にタイムアウトになります。私の理解では、ブラウザはアップロードが完了するのを待っているためリダイレクトしたくないということですが、js コード内でアップロードをキャンセルするにはどうすればよいですか? 問題を回避し、ファイルを書き込んで、それが適切な MIME タイプでない場合は削除することもできますが、それを行うのは少しばかげていると思います。それを停止してすぐにリダイレクトするイベントをトリガーする方法を見つけたいと思います。これが私のアプリコード(のスニペット)です:
app.get('/', function (req, res) {
res.render(__dirname + '/public/index.ejs', {error: 0});
});
app.get('/error', function (req, res) {
res.render(__dirname + '/public/index.ejs', {error: 1});
});
app.post('/upload', function (req, res) {
var timestamp = new Date().getTime().toString();
//console.log(timestamp);
var fstream;
req.pipe(req.busboy);
req.busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
if ("audio/wav" != mimetype)
{
console.log("invalid mimetype"); // that prints ok
// req.busboy.end(); // I tried that but it doesn't work
res.redirect('/error');
}
else
{
console.log("Uploading: " + mimetype);
fstream = fs.createWriteStream(__dirname + '/tmp/' + timestamp + filename);
file.pipe(fstream);
fstream.on('close', function () {
res.redirect('back');
});
}
});
});
誰かが私を正しい方向に向けることができますか? ご協力ありがとうございました !