Je travaille sur la gestion des téléchargements de fichiers en utilisant express.js, node et angular. La fonctionnalité de base fonctionne pour les images de petite taille. Alors que j'essaie de télécharger des images plus grandes, j'ai eu une erreur 404. J'utilise le chargement de fichiers angulaires. Voici mes codages de téléchargement de fichier
$upload.upload({ url: '/products/image/upload', data: { PRODUCT_ID : productId, }, file: file }).progress(function(evt){ console.log('percent: ' + parseInt(100.0 * evt.loaded / evt.total, 10)); }).success(function(data){ console.log(data); });
C'est mon code express js
app.post('/products/image/upload', controller.uploadProductImage); exports.uploadProductImage = function(req, res){ var fileObject = req.files.file; var newPath = ''; var newFilename = 'sample.png'; newPath = './uploads/products/' + newFilename; fs.rename(fileObject.path, newPath, function(err) { if (err) throw err; fs.unlink(fileObject.path , function() { if (err) throw err; }); }); res.json({success:true});
};
Je n'ai posté ici que l'exemple de code. Cela fonctionne bien pour une image de plus petite taille. Mais si je télécharge des images de grande taille, l'itinéraire s'affiche comme message d'erreur 404. J'espère que ce serait un problème de configuration, comme la mémoire, la limite de processus. Je ne sais pas quel est le problème exact.
J'ai essayé de définir la limite dans le script exprès comme
app.use(express.limit('2mb'));
Je ne travaille pas pour moi. Et j'ai essayé
node --max-old-space-size=2000 app.js
Malchance. Aidez-moi à résoudre ce problème
Merci d'avance
J'ai essayé de faire passer la tête des fichiers en utilisant Angular, Node et Express moi-même. J'utilise Express v4.1 avec connect-busboy et j'ai le Node suivant, Express Code en collaboration avec le module de téléchargement de fichiers angulaires Daniel Farids.
SERVER.JS Var express = require ('express'); // Serveur Web Express Var busboy = require ('connect-busboy'); // middleware pour le téléchargement de formulaire / fichier Var path = require ('path'); // utilisé pour le chemin du fichier Var fs = require ('fs-extra'); // Système de fichiers - pour la manipulation de fichiers Var util = require ('util'); Var app = express (); App.use (busboy ()); App.use (express.static (path.join (__ dirname, 'public'))); / * ================================================ ========== Créez une route (/ upload) pour gérer la soumission de formulaire (Gérer les demandes POST & PUT pour / charger) Express v4 Définition de l'itinéraire ================================================== ========== * / App.route ('/ upload') .post (function (req, res, next) { Var arr; Var fstream; Var fileize = 0; Req.pipe (req.busboy); Req.busboy.on ('fichier', fonction (nom de champ, fichier, nom de fichier, codage, mimetype) { // nom de fichier téléchargé, encodage, type MIME Console.log ('File [' + fieldname + ']: nom de fichier:' + filename + ', encodage:' + Encodage + ', type MIME:' + mimetype); // taille du fichier téléchargé File.on ('data', function (data) { Console.log ('File [' + fieldname + '] got' + data.length + 'bytes'); FileSize = data.length; Console.log ("fileSize =" + fileSize); }); File.on ('end', function () { Console.log ('File [' + fieldname + '] ENDED'); Console.log ("-------------------------"); }); / * Peupler Je collectionne les informations sur les fichiers dans les données lues sur le fichier. Il peut être plus correct de Lire les données du fichier après que le fichier a été enregistré dans le dossier img, c'est-à-dire après File.pipe (flux) complète la taille du fichier peut être obtenu en utilisant stats.size comme indiqué au dessous de * / Arr = [{fieldname: fieldname, filename: filename, encoding: encoding, MIMEtype: Mimetype}]; // Chemin d'accès où l'image sera téléchargée Fstream = fs.createWriteStream (__ dirname + '/ img /' + filename); // crée un flux inscriptible File.pipe (fstream); // canalise les données de publication dans le fichier // flux Terminé - (données écrites) envoyer la réponse postale Req.on ('end', function () { Res.writeHead (200, {"type de contenu": "texte / h tml"}); // en-tête de réponse HTTP //res.end(JSON.stringify(arr)); // Corps de réponse http - envoyer des données de json }); // écriture terminée pour diffuser Fstream.on ('finish', function () { Console.log ('Écriture terminée!'); // Obtenir des statistiques de fichier (y compris la taille) pour le fichier enregistré sur le serveur Fs.stat (__ dirname + '/ img /' + filename, function (err, stats) { Si (erreur) Jeter errer; // si un fichier If (stats.isFile ()) { //console.log("It''sa file & stats.size = "+ JSON.stringify (stats)); Console.log ("Taille de fichier enregistrée sur le serveur:" + stats.size); Console.log ("-----------------------"); }; }); }); // Erreur Fstream.on ('error', function (err) { Console.log (err); }); }); // @ END / .req.busboy }) // @ END / POST
Voir [My GitHub] ( https://github.com/mick26/ng_Node-AdvancedFileUpload )
Notez avec express 4.1 beaucoup de middleware intégré dans express 3.x est omise. Vous ne pourrez pas utiliser req.files car cette fonction fait partie d'un middleware tiers appelé 'formidable' qui a été utilisé par un autre middleware appelé 'bodyParser'. Les deux formidables et l'analyseur de corps sont encore disponibles sur NPM, je pense. Au lieu de cela, j'ai utilisé un module npm appelé connect-busboy et transmis les données. Je viens de vérifier le programme et j'ai téléchargé un fichier de> 320M avec succès. J'espère que cela peut vous aider.