javascript - Nodejs,连接巴士男孩。上传几个文件

标签 javascript node.js file-upload busboy

通过 Busboy 上传少量文件时,我遇到了事件问题。我的代码:

app.post('/multiupload', function(req, res) {
    var fstream;
    var files = [];
    var busboy = new Busboy({headers: req.headers});
    busboy.on('file', function (fieldname, file, filename) {
        fstream = fs.createWriteStream(__dirname + '/../static/uploaded/' + filename);
        file.pipe(fstream);
        fstream.on('close', function(){
            console.log('file ' + filename + ' uploaded');
            files.push(filename);
        });
    });

    busboy.on('end', function(){console.log('END')});

    busboy.on('finish', function(){
        console.log('finish, files uploaded ', files);
        res.redirect('back');
    });
    req.pipe(busboy);
});

我的表单(Jade 模板)

form(method="POST", action="/multiupload" name="multiupload_form", enctype="multipart/form-data")
input(type='file' name='multifile', multiple)
input(type="submit" value="Upload!")

事件“结束”被忽略,在文件上传过程中完成触发。我哪里错了?

服务器控制台报告:

file 111.gz uploaded
file 222.mp4 uploaded
file 333.jpg uploaded
finish, files uploaded  [ '111.gz', '222.mp4', '333.jpg' ]
file 444 uploaded
file 555.jpg uploaded

最佳答案

busboy 不会发出 end 事件。一旦处理了整个请求并且完全读取了所有file流,就会发出finish事件。所以问题是底层文件描述符的关闭发生在下一个tick(左右),这是在发出finish之后发生的。

如果您需要知道所有文件描述符何时关闭,那么您需要想出一种方法来跟踪已发出多少 close 事件。

关于javascript - Nodejs,连接巴士男孩。上传几个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26162633/

相关文章:

node.js - 无法连接到托管的 redis : Ready check failed: ERR operation not permitted

file-upload - 如何使用 Talend tREST 上传文件?

google-apps-script - 上传自昨天以来损坏的二进制文件,解决方法?

javascript - 如何使用书签通过电子邮件发送当前页面的链接而不覆盖选项卡的内容?

node.js - Nodejs 用户配置文件和 session

javascript - 即使在浏览器刷新后仍会继续重复的倒计时器

javascript - 无法在 Sequelize 中使用类模型在数据库中创建表

java - FTPClient.storeFile() 返回 false,FTP 返回代码为 450,表示文件正忙

JavaScript 数组中最长的字符串,但有一些变化

javascript - JavaScript 函数中的类型错误