这里是我的问题,我有一个表单,我可以插入一个文件和一个字段,但我只收到文件,而不是参数test
!为什么?
这是我的代码:
app.js:
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var port = 8000;
var multer = require('multer'); // v1.0.5
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, './uploads');
},
filename: function (req, file, callback) {
callback(null, file.originalname.substring(0,file.originalname.lastIndexOf('.')) + '-' + Date.now() + file.originalname.substring(file.originalname.lastIndexOf('.'),file.originalname.length));
}
});
var upload = multer({ storage : storage}).single('fileUpload');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.post('/api/upload',function(req,res){
console.log(req.body);
upload(req,res,function(err) {
if(err) {
return res.end("Error uploading file.");
}
res.end("File is uploaded");
});
});
app.listen(port, function () {
console.log('Express server inizializzato sulla porta ' + port);
});
index.html:
<html>
<head>
<title>Test upload</title>
</head>
<body>
<form name="form" action="http://localhost:8000/api/upload" method="post" enctype="multipart/form-data">
<input type="text" name="test" />
<input type="file" name="fileUpload" />
<input type="submit" value="invia" />
</form>
</body>
</html>
有人能帮我吗?
6条答案
按热度按时间pgky5nke1#
2017年更新
来自自述文件
注意req.body可能还没有完全填充,这取决于客户机向服务器传输字段和文件的顺序。
我通过在前端反转窗体对象属性的顺序来解决问题:
在后端:
ufj5ltwl2#
您需要重新排列前端请求中的字段,我将在下面进行解释,
我正在使用multer在我的nodejs应用程序中上传多个文件和单个文件。
Postman 请求截图(错误):
Postman 请求屏幕截图(正确方法):
查看字段顺序的差异。始终在请求内容的最后附加媒体文件。
我花了将近2个小时才找到这个。绝对有效。试试吧。
af7jpaap3#
我在post函数的末尾解决了移动
req.body
的问题:如果有人能告诉我为什么我会乐于学习新的东西!但是,现在,我下定决心了!
yebdmbv44#
将您的
console.log(req.body)
移入upload(req,res,function(err) {...})
默认的express body-parser不能处理multipart/form-data,因此我们使用multer来解析可以在upload函数中访问的form-data。
whitzsjs5#
如果其他人来到这里,有一个稍微复杂的初始布局,如下图所示,移动上传功能到文件中的每一个路线,并使用他们那里似乎已经解决了这个问题。为什么它是如此喜怒无常,我不知道,老实说,这是一个巨大的头痛。
希望有一天这能帮助到其他人。
初始应用程序布局
应用程序
配置文件-图片.ts
由于某种原因更新了工作布局
应用程序
配置文件-图片.ts
pzfprimi6#
您可以使用javascript手动重新排序字段,以确保字段在文件之前发送。