如何将 Multer 中间件中的文件重命名为我在请求中发送的数据

How to rename file in Multer middleware to data I am sending in request

在前端,我为每个订单生成唯一 ID。想法是重命名用户上传到 orderId 的文件。 这是我对服务器的请求:

   const handleFileUpload = e => {
      const formData = new FormData()
      formData.append("pdf-file", e.target.files[0])
      formData.append("orderId", orderId)

      axios.post("http://localhost:8000/upload", formData, { headers: { "Content-Type": "multipart/form-data" } })
         .then(res => {
            console.log(res)
         })
         .catch(error => {
            console.log(error)
         })
   }

这是服务器代码:

const storage = multer.diskStorage({
   destination: (req, file, cb) => {
      cb(null, "./uploads")
   },
   filename: (req, file, cb) => {
      console.log(req.body)
      cb(null, `${file.fieldname}-${req.body.orderId}`)
   }
})

const uploadStorage = multer({storage: storage})

app.post("/upload", uploadStorage.single("pdf-file"), (req, res) => {
   console.log(req.body)
   return res.send("file upload")
})

console.log(req.body)filename 中显示 空对象 ,在 app.post() 中显示 orderId。 外观如下:

[Object: null prototype] {} // inside filename
[Object: null prototype] { orderId: 'e923920b-fdf0-41ab-97dd-2fcf20b57250' } // inside app.post()

因此,据我在 filename 中的理解,这无法完成。如何处理这种情况?这可能吗?

我所要做的就是更改我附加到 formData 的顺序。

现在可以了:

formData.append("orderId", orderId)
formData.append("pdf-file", e.target.files[0])