2014-04-24 2 views
1

J'essaie de créer un serveur de téléchargement de fichiers extrêmement simple avec node.js et express 4.0.0. Selon http://howtonode.org/really-simple-file-uploads je pense que je devrais obtenir "req.files", mais il n'existe pas (est indéfini).Téléchargement d'un fichier avec Express (node.js)

var express = require('express') 
var fs = require('fs') 
var app = express() 

app.get('/', sendForm) 
app.post('/upload', uploadFile) 
app.listen(8000) 

function sendForm(req, res) 
{ 
    // a form with a <input type="file"> 
    res.send('<!doctype html><html><head></head><body><form action=\"/upload\" method=\"post\" enctype=\"multipart/form-data\"><input type=\"file\" name=\"displayImage\"><button type=\"submit\">submit</button></form></body></html>') 
} 

function uploadFile(req, res) 
{ 
    console.log(req.files) // prints undefined 
    res.redirect('back') 
} 

Certains sites Web suggèrent d'ajouter "app.use (bodyParser)" et ceux appelés par "app.configure()". Pour autant que je sache, "app.configure" a été supprimé de express 4.0.0.

Pourquoi n'existe-t-il pas de fichiers de demande?

Répondre

1

Je trouve Formidabble facile à travailler, voici comment vous l'utiliser:

var formidable = require('formidable'); 
var fs   = require('fs'); 

module.exports.upload = function (req, res, next) { 
    var form = new formidable.IncomingForm(); 

    form.parse(req, function(err, fields, files) { 
     if ('file' in files) { 
      var file = files['file']; 

      // Do something with file 

      module.exports._deleteFiles(files); 
      res.send(200); 
     } else { 
      module.exports._deleteFiles(files); 
      res.send(400); 
     } 
    }); 
}; 

module.exports._deleteFiles = function (files) { 
    // Delete temporary files 
    for (var f in files) { 
     fs.unlink(files[f].path); 
    } 
}; 
0

Récemment, la plupart des logiciels intermédiaires étaient taken out of Express. Vous devez inclure le middleware pour remplir req.files - quelque chose comme connect-multiparty.

Incluez var multiparty = require('connect-multiparty'); avec vos importations de module, et après avoir un app, ajoutez le middleware avec app.use(multiparty());. Assurez-vous de nettoyer les fichiers temporaires et de ne faire passer que le multi-middleware comme middleware pour les routes qui prendront explicitement en charge les téléchargements.