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]);
}
已解决问题。
我有一个反应应用程序试图使用 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]);
}
已解决问题。