2017-10-10 3 views
0

J'ai un point final auquel je poste un fichier .zip et un fichier .xlsx en même temps.ng-file-upload avec Busboy et Node fonctionne localement mais pas sur le serveur

client (angulaire 1):

files.upload = Upload.upload({ 
    url: '/api/files', 
    data: { xlsxFile: xlsxFile, zipFile: zipFile } 
}); 

files.upload.then(
    function (response) { 
    $scope.state = 'completed'; 
    $scope.message = response.data.data; 
    }, 
    function (error) { 
    $scope.state = 'error'; 
    $scope.message = _.get(error, 'data.errors[0].meta.errorObj') || 'An unspecified error occurred, please check your files and try again.'; 
    }, 
    function (evt) { 
    progress = evt.loaded/evt.total; 
    } 
); 

Server (Noeud):

const busboy = new Busboy({headers: req.headers}); 
var xlsxFileBuffers = []; 
var zipFilePath = `${Math.random().toString(36).substring(5)}zipFile.zip`; 
busboy.on('file', (fieldName, file, filename, encoding, mimeType) => { 
    if (!mimeType.includes('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') && 
    !mimeType.includes('application/vnd.ms-excel') && 
    !mimeType.includes('application/zip') 
) return next('Invalid file type.'); 

    if (fieldName === 'zipFile') { 
    file.pipe(fs.createWriteStream(zipFilePath)); 
    } 
    else { 
    file.on('data', function(data) { 
     xlsxFileBuffers.push(data); 
    }); 
    file.on('end', function() { 
     if (!xlsxFileBuffers.length) { 
     return next('Cannot read xlsx file.'); 
     } 
    }); 
    } 
}); 
busboy.on('finish',() => { 
    console.log('busboy finish called'); 
    if (xlsxFileBuffers.length > 0) { 
    console.log('we made it!'); 
    } 
}); 
req.pipe(busboy); 

Maintenant vient ici la partie curieuse: il fonctionne à 100% lors de l'exécution au niveau local, mais quand il est en cours d'exécution sur un serveur distant, il répond par net::ERR_CONNECTION_RESET. L'objet error imprime, mais il imprime ce qui ressemble à l'objet busboy, sans aucune information utile que j'ai trouvé pour savoir pourquoi la connexion a été fermée.

C'est un peu partielle de l'objet: {upload: f, progress: 81, name: "test-xlsx.xlsx", lastModified: 1507565920197, lastModifiedDate: Mon Oct 09 2017 09:18:40 GMT-0700 (PDT)}

Alors que nous pouvons le voir fait quelques progrès. Et sur le serveur il existe le fichier .zip, mais il n'est pas complet, car une opération de décompression sur il échoue. Faites-moi savoir si d'autres informations pourraient vous aider! Merci! Edit: Le fichier .zip est 197KB et le fichier .xlsx est 7KB, lors de tests locaux, il a travaillé avec des fichiers zip au moins aussi grand que 120MB.

Répondre

0

Je l'ai compris. Il s'est avéré être un problème avec pm2. Nous avons eu pm2 en cours d'exécution sur le serveur avec la commande watch. Ainsi, chaque fois que quelque chose dans les fichiers du serveur a changé, il a redémarré. Il écrivait les fichiers sur le disque, donc une fois que pm2 a vu l'archive .zip, il a redémarré et a arrêté la connexion.