我正在尝试实现一个为我正在构建的汽车列表项目上传照片的系统。老实说,这是第一次使用 multer,我找不到它有什么问题。在在这里询问之前,我一直在做一些研究并查看教程和文档。在我的 POST 请求中,一切都按计划进行,但 photoArray 部分除外。我还尝试使用 URL.createObject 将文件转换为 URL,但它不起作用。在这两种情况下,无论是否使用 URL,req.files 都是空的。感谢您的任何澄清。 这是我的代码: 1)我的申请书的前面部分
const submitData = async () => {
const token = Cookies.get("User");
if (token) {
const formData = new FormData();
// Append form data fields
formData.append("brand", currentBrand.brand);
formData.append("model", currentModel);
//...deleted some appended values for ease of reading
//...i'm trying to pass these photos to multer
photoArray.forEach((file) => {
formData.append(`photos`, file);
});
await axios
.post(
`http://localhost:3000/api/car/create/${
jwtDecode(token).findUser._id
}`,
formData,
{
headers: { "Content-Type": "multipart/form-data" },
}
)
.then((res) => {
setSubmit(true);
setTimeout(() => {
setSubmit(false);
}, 2000);
})
.catch((err) => {
setError({ state: true, message: err.response.data.message });
setTimeout(() => {
setError({ error: false, message: "" });
}, 2000);
});
} else {
setError({ state: true, message: "Must login first" });
setTimeout(() => {
setError({ state: false, message: "" });
}, 2000);
}
};
2)这是我的“Car.js”路由器
const router = Router();
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "back/uploads");
},
filename: function (req, file, cb) {
const uniqueSuffix = Date.now() + file.originalname;
cb(null, file.fieldname + "-" + uniqueSuffix);
},
});
const upload = multer({ storage: storage });
router.post("/create/:id", upload.any("photos"), createCar);
3)如果需要,这是我的控制器
export const createCar = async (req, res) => {
try {
console.log("Files");
console.log(req.files); // Log uploaded files
const newCar = new Car(req.body);
const savedCar = await newCar.save();
const currentUser = await User.findById(req.params.id);
if (currentUser) {
currentUser.data.push(savedCar.id);
await currentUser.save();
} else {
req.status(404).json("User error");
}
res.status(200).json(savedCar);
} catch (error) {
res.status(400).json(error);
}
};
upload.any("photos")
您使用的是“照片”键而不是“文件”,因此在控制器中,如果要访问文件数组,则必须使用语法:
req.photos
Hpoe 这很有帮助。