Tôi đang cố gắng để có một cơ chế tải lên tệp đơn giản hoạt động với Express 4.0 nhưng tôi vẫn tiếp tục sử undefined
dụng req.files
phần app.post
thân. Đây là mã có liên quan:
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');
});
.. và mã Pug đi kèm:
form(name="uploader", action="/fileupload", method="post", enctype="multipart/form-data")
input(type="file", name="file", id="file")
input(type="submit", value="Upload")
Giải pháp
Nhờ phản hồi của mscdex bên dưới, tôi đã chuyển sang sử dụng busboy
thay vì 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/
thư mục trong thư mục chính của ứng dụng nếu không bạn sẽ gặp lỗi sau khi tải lên.