2016-07-20 18 views
0

Ich versuche, hochgeladene Bilder vom Client zum Server zu senden. ich tue es auf diese Weise:Busboy 'filesLimit' Ereignis nicht Feuer

... 
var files = document.getElementById('myForm').files; 
var formData = new FormData(); 
formData.append('image', files[0]); 
$.ajax({ 
    url: '/upload', 
    data: formData, 
    processData: false, 
    contentType: false, 
    type: 'POST', 
    success: function(data){ 
     alert(JSON.stringify(data)); 
    } 
}); 
... 

In Server i Express verwenden. Dann für den Zugriff auf die hochgeladenen Dateien auf dem Server i verwenden connect-busboy Modul:

... 
router.post('/upload', function(req, res, next) { 
    req.pipe(req.busboy); 
    req.busboy.on('file', function (fieldname, file, filename) { 
    //do something 
    }); 
    req.busboy.on('filesLimit', function(){ 
    //do something 
    }); 
}); 
... 

Und maximale Dateigröße der hochgeladenen Dateien eingestellt ich eine fileSize Option 3 MB in einem connect-busboy Konstruktor:

... 
app.use(
    busboy({ 
     limits: { 
     fileSize: 3*1024 //3 mb 
     } 
    }) 
); 
... 

Das Problem ist, dass, wenn ich Bilder mit einer Größe größer als 3 MB, filesLimit Ereignis Hochladen tun Esnt Feuer. Noch schlimmer, file Event feuert in diesem Moment und (!) Nur 3 MB Datei wird verfügbar.

Was ist los? Warum filesLimit Ereignis nicht Feuer? Danke für Ihre Hilfe!

Antwort

0

Beantworten meiner eigenen Frage.

Ich füge einen Dateigrößenbeschränkungsereignis-Listener in falscher Weise an. Es stellt sich heraus, dass wir ein Ereignis an ein Dateiobjekt anhängen sollten, bei dem es sich um einen Stream handelt.

req.busboy.on('file', function (fieldname, file, filename) { 
    file.on('limit', callback); // <- here is 
}); 
Verwandte Themen