Node.js: 根据 FormData 值设置 Multer 目标
Node.js: set Multer destination based on FormData values
我正在创建一个 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
});
});
我在 storage
中设置的 destination
将取决于 body
对象的值(如 req.body.product
)。但是在调用 multer()
之前我无法访问 req.body
。如何在设置 multer.storage
之前访问 req.body
?
您需要为 diskStorage()
as shown in the multer
documentation 使用 destination
配置 属性。例如:
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
回调中访问的任何非文件字段都需要定位在您正在处理的文件字段之前,因为 multipart/form-data 请求的字段已排序.因此,如果您有静态 HTML 形式,那么重要的是输入的文字位置、select 等元素。对于 XHR,这是您为每个字段调用 formData.append()
的顺序。
我正在创建一个 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
});
});
我在 storage
中设置的 destination
将取决于 body
对象的值(如 req.body.product
)。但是在调用 multer()
之前我无法访问 req.body
。如何在设置 multer.storage
之前访问 req.body
?
您需要为 diskStorage()
as shown in the multer
documentation 使用 destination
配置 属性。例如:
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
回调中访问的任何非文件字段都需要定位在您正在处理的文件字段之前,因为 multipart/form-data 请求的字段已排序.因此,如果您有静态 HTML 形式,那么重要的是输入的文字位置、select 等元素。对于 XHR,这是您为每个字段调用 formData.append()
的顺序。