如果 mime 类型无效,如何在 busboy 中停止上传和重定向?
How to stop upload and redirect in busboy if mime type is invalid?
我是 Node.js 的新手,我正在使用 Express 和 Busboy-Connect 创建一个简单的文件上传表单,仅适用于 wav 文件。
这是我正在尝试做的事情:
- 开始上传
- 如果 mimetype 不是 wav,重定向到错误页面
- else : 将文件写入服务器并重定向回来。
如果 mimetype 有效,则一切正常,但如果无效,我将无法重定向,浏览器将挂起并最终超时。
我对它的理解是浏览器不想重定向,因为它正在等待上传完成,但是我怎样才能在我的 js 代码中取消上传呢?
我可以解决这个问题并编写文件然后删除它,如果它不是正确的 mimetype,但我认为这样做有点愚蠢,我宁愿找到一种方法来触发一个事件,该事件将停止它并立即重定向。
这是我的应用程序代码的(片段):
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');
});
}
});
});
任何人都可以指出我正确的方向吗?
感谢您的帮助!
好吧,我在 npm 的文档中找到了它,如果您认为任何人可能有兴趣从 google 搜索中找到这个答案,您可以让它解决,否则请随意 close/remove 这个post.
基本上文件流上有一个函数需要被调用来解除阻塞 busboy,所以我要做的就是添加
file.resume();
在重定向到错误页面之前。
我是 Node.js 的新手,我正在使用 Express 和 Busboy-Connect 创建一个简单的文件上传表单,仅适用于 wav 文件。 这是我正在尝试做的事情: - 开始上传 - 如果 mimetype 不是 wav,重定向到错误页面 - else : 将文件写入服务器并重定向回来。
如果 mimetype 有效,则一切正常,但如果无效,我将无法重定向,浏览器将挂起并最终超时。 我对它的理解是浏览器不想重定向,因为它正在等待上传完成,但是我怎样才能在我的 js 代码中取消上传呢? 我可以解决这个问题并编写文件然后删除它,如果它不是正确的 mimetype,但我认为这样做有点愚蠢,我宁愿找到一种方法来触发一个事件,该事件将停止它并立即重定向。 这是我的应用程序代码的(片段):
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');
});
}
});
});
任何人都可以指出我正确的方向吗? 感谢您的帮助!
好吧,我在 npm 的文档中找到了它,如果您认为任何人可能有兴趣从 google 搜索中找到这个答案,您可以让它解决,否则请随意 close/remove 这个post.
基本上文件流上有一个函数需要被调用来解除阻塞 busboy,所以我要做的就是添加
file.resume();
在重定向到错误页面之前。