Node.js:根据FormData值设置Multer目标

时间:2017-07-11 18:06:23

标签: javascript node.js express xmlhttprequest multer

我正在创建XMLHttpRequestxhr),该FormData会向Node.js发送包含文件和一些值的Express对象(Multer服务器。我使用bodyParser,因为我无法将multipartrouter.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

1 个答案:

答案 0 :(得分:3)

您需要使用destination as shown in the multer documentationdiskStorage()配置属性。例如:

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()的顺序。