J'essaie de faire fonctionner un mécanisme simple de téléchargement de fichiers avec Express 4.0, mais j'obtiens toujours les résultats suivants undefined
para req.files
dans le app.post
corps. Voici le code correspondant :
var bodyParser = require('body-parser');
var methodOverride = require('method-override');
//...
app.use(bodyParser({ uploadDir: path.join(__dirname, 'files'), keepExtensions: true }));
app.use(methodOverride());
//...
app.post('/fileupload', function (req, res) {
console.log(req.files);
res.send('ok');
});
et le code Pug correspondant :
form(name="uploader", action="/fileupload", method="post", enctype="multipart/form-data")
input(type="file", name="file", id="file")
input(type="submit", value="Upload")
Solution
Grâce à la réponse de mscdex ci-dessous, je suis passé à l'utilisation de busboy
au lieu de bodyParser
:
var fs = require('fs');
var busboy = require('connect-busboy');
//...
app.use(busboy());
//...
app.post('/fileupload', function(req, res) {
var fstream;
req.pipe(req.busboy);
req.busboy.on('file', function (fieldname, file, filename) {
console.log("Uploading: " + filename);
fstream = fs.createWriteStream(__dirname + '/files/' + filename);
file.pipe(fstream);
fstream.on('close', function () {
res.redirect('back');
});
});
});
2 votes
Comment cela fonctionne-t-il avec des fichiers multiples ?
0 votes
@chovy cela devrait fonctionner parfaitement avec des fichiers multiples.
2 votes
Je pense qu'il est possible de faire app.post('/fileupload',busboy(), function(req, res) {
0 votes
Bonne solution, je voulais juste noter que vous devez créer une
./files/
dans le répertoire d'origine de votre application, sinon vous obtiendrez une erreur après le téléchargement.0 votes
Comment sont gérés les fichiers temporaires ? Busboy les supprime-t-il automatiquement ? Je ne vois pas où les fichiers temporaires sont supprimés avant d'être enregistrés sur le disque.