Ich versuche, einen einfachen Mechanismus zum Hochladen von Dateien mit Express 4.0 zum Laufen zu bringen, aber ich bin immer undefined
auf req.files
dem app.post
Laufenden. Hier ist der relevante Code:
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');
});
.. und der dazugehörige Mops-Code:
form(name="uploader", action="/fileupload", method="post", enctype="multipart/form-data")
input(type="file", name="file", id="file")
input(type="submit", value="Upload")
Lösung
Dank der Antwort von mscdex unten habe ich busboy
anstelle von 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');
});
});
});
./files/
Verzeichnis im Home-Verzeichnis Ihrer App erstellen müssen, da sonst nach dem Hochladen eine Fehlermeldung angezeigt wird.