簡體   English   中英

nodejs,連接busboy。 上傳幾個文件

[英]nodejs, connect-busboy. Upload few files

通過 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);
});

我的表格(翡翠模板)

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事件。 所以問題是底層文件描述符的關閉發生在下一個滴答(左右),它發生在發出finish之后。

如果您需要知道所有文件描述符何時關閉,那么您需要想出一種方法來跟蹤發出了多少close事件。

當文件事件關閉時調用 close 事件。 您可以在文件事件中跟蹤文件計數,並可以在關閉事件中使用此計數器查看所有文件何時上傳。

下面是你可以嘗試的東西

let counter = 0
busboy.on('file', function (fieldname, file, filename) {
        fstream = fs.createWriteStream(__dirname + '/../static/uploaded/' + filename);
        file.pipe(fstream);
        counter++;
        fstream.on('close', function(){
            counter--;
            console.log('file ' + filename + ' uploaded');
            files.push(filename);
            if(counter == 0){
               res.send({message: "All Files Uploaded", })
            }
        });
 });
    req.pipe(busboy);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM