gpt4 book ai didi

node.js - 输入验证失败时如何防止 Multer 文件上传

转载 作者:行者123 更新时间:2023-12-05 05:11:03 26 4
gpt4 key购买 nike

我正在创建一个 (POST) 路由来处理文件上传,并且除了文件路径之外还将一些其他属性存储到 MongoDB。问题是当输入验证失败时,文件仍然上传到静态(上传)文件夹中。

我正在使用 Multer 中间件进行文件上传。

设置

const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "./uploads/");
},
filename: (req, file, cb) => {
cb(null, Date.now() + "-" + file.originalname);
}
});

const fileFilter = (req, file, cb) => {
if (file.mimetype === "image/jpeg" || file.mimetype === "image/png") {
cb(null, true);
} else {
//rejects storing a file
cb(null, false);
}
};

const upload = multer({
storage: storage,
limits: {
fileSize: 1024 * 1024 * 5
},
fileFilter: fileFilter
});

字段

const seamUpload = upload.fields([
{ name: "stylePicture", maxCount: 1 },
{ name: "materialPicture", maxCount: 1 }
]);

路线

router.post("/", [auth, seamUpload], async (req, res) => {
const { error } = validateSeam(req.body);
if (error) return res.status(400).send(error.details[0].message);

const seam = new Seam({
stylePicture: req.files["stylePicture"][0].path,
materialPicture: req.files["materialPicture"][0].path,
description: req.body.description,
deliveryDate: req.body.deliveryDate,
customer: req.body.customerId
});

await seam.save();

res.send(seam);
});

Client(PostMan) Screenshot

最佳答案

我遇到了这个问题。我发现的一种解决方案是当您在所有模式下的身份验证都出现错误时,在这种情况下,如果您有来自客户端的文件,您可以像这样轻松删除它:

    if(req.file) {
fs.unlink(
path.join(__dirname, "go to root folder that 'req.file.path' leads to the file", req.file.path),
(err) => console.log(err));
}

或者如果您有多个文件,您应该对每个文件执行相同的方法。如果有的话,我很高兴在这里。

我希望有另一种方法使用 multer 包来处理它。

祝你好运

关于node.js - 输入验证失败时如何防止 Multer 文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55938484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com