这是我的问题,我有一个表单,可以在其中插入文件和字段,但仅接收文件而不接收参数test!为什么?
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>
有人可以帮我吗?
2017更新
从自述文件
请注意,req.body可能尚未完全填充。这取决于客户端将字段和文件传输到服务器的顺序。
我通过反转前端的表单对象属性的顺序解决了我的问题:
var newFormObj = new FormData(); newFormObj.append('internalUserID', internalUserID); newFormObj.append('listingImage', this.binaryImages[image]);
在后端:
var storage = multer.diskStorage({ destination: function (req, file, cb) { console.log(req.body.internalUserID) // YAY, IT'S POPULATED cb(null, 'listing-pics/') }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()) } }); var upload = multer({ storage: storage });