我正在创建XMLHttpRequest
(xhr
),该FormData
会向Node.js
发送包含文件和一些值的Express
对象(Multer
服务器。我使用bodyParser
,因为我无法将multipart
与router.post("/submit", function(req, res) {
var storage = multer.diskStorage({
// set destination here
})
var upload = multer({ storage: storage }).any();
upload(req, res, function (err) {
// I can access req.body here
});
});
数据一起使用。
destination
我在storage
中设置的body
将取决于req.body.product
对象的值(如req.body
)。但在致电multer()
之前,我无法访问req.body
。如何在设置multer.storage
之前访问Rmarkdown
?
答案 0 :(得分:3)
您需要使用destination
as shown in the multer
documentation的diskStorage()
配置属性。例如:
var storage = multer.diskStorage({
destination: function(req, file, cb) {
var newAbsoluteDir = /* calculate based on `req.body` here */;
cb(null, newAbsoluteDir);
}
});
var upload = multer({ storage });
// ...
router.post('/submit', upload.any(), function(req, res) {
// ...
});
正如文档所述,您需要在这些multer
回调中访问的任何非文件字段都需要放在您正在处理的文件字段之前,因为多部分/表单数据请求的字段是有序的。因此,如果您有一个静态HTML表单,它就是输入,选择等重要元素的文字位置。对于XHR,它是您为每个字段调用formData.append()
的顺序。