gpt4 book ai didi

node.js - 使用 Express 4.0 上传文件 : req. 文件未定义

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:51 28 4
gpt4 key购买 nike

我试图获得一个与 Express 4.0 一起使用的简单文件上传机制,但在 app.post 正文中,我不断收到 req.filesundefined 消息。相关代码如下:

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');
});

.. 以及随附的 Pug 代码:

form(name="uploader", action="/fileupload", method="post", enctype="multipart/form-data")
input(type="file", name="file", id="file")
input(type="submit", value="Upload")

解决方案
感谢 mscdex 的回复下面,我改用 busboy 而不是 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');
});
});
});

最佳答案

body-parser模块仅处理 JSON 和 urlencoded 表单提交,而不处理多部分(如果您上传文件,就会出现这种情况)。

对于多部分,您需要使用类似 connect-busboy 的内容或multerconnect-multiparty (multiparty/formidable 最初是在express bodyParser 中间件中使用的)。另外,FWIW,我正在 Busboy 之上开发一个更高级别的层,名为 reformed 。它带有 Express 中间件,也可以单独使用。

关于node.js - 使用 Express 4.0 上传文件 : req. 文件未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55528153/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com