node.js - 输入验证失败时如何防止 Multer 文件上传
问题描述
我正在创建一个(POST)路由来处理文件上传,除了文件路径之外,还将一些其他属性存储到 MongoDB。问题是当输入验证失败时,文件仍然上传到 static(uploads) 文件夹中。
我正在使用 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);
});
解决方案
我就像你面临这个问题一样。我发现的一种解决方案是,当您在所有模式下的身份验证似乎出错时,如果您有来自客户端的文件,您可以像这样轻松删除它:
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 包来处理它。
祝你好运
推荐阅读
- python - Pyqt5 - QComboBox 在填充元素时非常慢
- python - 导出数据到excel,只得到最后一行
- python - 随着时间的推移验证连续条件
- javascript - 从 JSON 文件接收 JavaScript 对象后正确访问它
- c# - 画线不出现
- scala - spark scala 类型与 groupbykey 中的 zipwithIndex 不匹配
- fft - 对音频样本运行 FFT 后如何确定截止幅度?
- c++ - 如何正确地将 shared_pointer 传递给构造函数?
- responsive-design - 如何将文本旁边的图像与显示对齐:flex(响应式)
- vb.net - 如何在 VB.NET 中获取外部 ProgressBar 的 hWnd