NodeJS Web App: le téléchargement de fichier s’arrête au début du fichier

Je travaille sur un projet dans NodeJS qui implique le téléchargement de fichiers. Le téléchargement se fait côté client avec le code:

$('#file-upload').bind('change focus click', function() { var file = jQuery(this)[0].files[0]; if (file && file.fileName) { var xhr = new XMLHttpRequest(); xhr.upload.addEventListener('progress', onProgressHandler, false); xhr.upload.addEventListener('load', transferComplete, false); xhr.open('POST', '/upload', true); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.setRequestHeader('X-File-Name', encodeURIComponent(file.fileName)); xhr.setRequestHeader('Content-Type', 'application/octet-stream'); xhr.send(file); function onProgressHandler(evt) { var percentage = event.loaded/event.total*100; console.log(percentage); } function transferComplete(evt) { console.log('Done'); } } }); 

Et côté serveur, j’utilise:

 app.post('/upload', function(req, res, next) { if(req.xhr) { console.log('Uploading...'); var fName = req.header('x-file-name'); var fSize = req.header('x-file-size'); var fType = req.header('x-file-type'); var ws = fs.createWriteStream('./'+fName) req.on('data', function(data) { console.log('DATA'); ws.write(data); }); req.on('end', function() { console.log('All Done!!!!'); }); } }); 

Ce code fonctionne seul, mais lorsqu’il est combiné au rest de mon projet beaucoup plus volumineux, il semble couper le début des gros fichiers et ignorer les petits fichiers dans son ensemble. Si je télécharge un petit fichier, le fichier console.log (‘DATA’) ne se déclenche jamais et il se déclenche pour les fichiers volumineux, mais pas pour le début du fichier. Je pense que, pour une raison quelconque, le fichier est envoyé tôt et que, au moment où ma fonction le détecte, le début (ou dans le cas d’un fichier de petite taille, le tout) a déjà été envoyé. Je ne sais pas ce qui serait la cause de cela, cependant.

Merci!

Je l’ai compris. Il y avait tellement de logique entre la définition de mon itinéraire et le code de téléchargement de fichier en cours d’exécution qu’il n’était pas prêt d’écouter le fichier.

J’ai exactement ce même problème. Cela me dérange que le problème réside dans le fait qu’il existe trop de logique entre la requête et l’événement on('data') . Je teste avec un serveur local et la quantité de logique entre le début de la demande et l’enregistrement de l’événement on data est négligeable. Mais le fait que je n’ai pas besoin de traverser Internet pour effectuer le téléchargement rend ce problème Êtes-vous toujours confronté à ce problème?