multer 不上传多张图片 node.js

multer not uploading multiple images node.js

我有一个反应应用程序试图使用 formdata 上传多个文件。它似乎能够在后端执行 upload.single() 但不能执行 upload.array() 。我想不通为什么。

单击按钮时处理上传的函数

  const handleUpload = async () => {
    let data = new FormData();
    data.append("files", imageList);
    data.append("title", title);
    data.append("short_text", shortText);
    data.append("news", news);
    const response = newsUpload(data);
    console.log(response);
  };

前端的api函数

export const newsUpload = async (data) => {
  return await api
    .post(`api/news/upload`, data)
    .then((data) => {
      return "DONE!";
    })
    .catch((err) => {
      console.log(err.response.data);
    });
};

后端: 我在 server.js 文件中实例化 multer 实例,该文件是 运行 文件。

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "uploads/");
  },
  filename: function (req, file, cb) {
    cb(null, req.userId + Date.now() + ".jpeg");
  },
});
const upload = multer({ storage: storage });

然后我将上传功能发送到路由器:

require("./app/routes/news.routes")(app, upload);

news.routes.js 定义 api/news/upload 的路由,其中​​ upload.array() 被发送通过:

app.post(
    "/api/news/upload",
    [authJwt.verifyToken, authJwt.isAdmin],
    upload.array("files",5),
    controller.upload
  );

如果我将 upload.array("files",5) 更改为 upload.single("file") 并相应地更改前端,它通过上传一个文件来工作。

我不知道为什么 upload.array() 不起作用。

问题是 data.append("files", imageList); 本质上是将数组附加到数组,因此发送到 api 的文件数组是 [[Files]],而不是必需的 [Files]。

改成

for (let i = 0; i < imageList.length; i++) {
  data.append("files", imageList[i]);
}

已解决问题。