【发布时间】:2021-12-25 15:41:12
【问题描述】:
我是第一次使用 multer,我注意到图像总是被上传。
现在我的问题是我想用 Joi 对请求的正文进行一些数据验证,然后如果数据验证成功,则将文件移动到相应的文件夹中。
使用 Multer 是否可行?您将如何实现?
或者,有没有办法通过 Multer 禁用自动上传,并在数据验证完成后手动移动文件?
非常感谢您的帮助。
【问题讨论】:
标签: javascript multipartform-data multer
我是第一次使用 multer,我注意到图像总是被上传。
现在我的问题是我想用 Joi 对请求的正文进行一些数据验证,然后如果数据验证成功,则将文件移动到相应的文件夹中。
使用 Multer 是否可行?您将如何实现?
或者,有没有办法通过 Multer 禁用自动上传,并在数据验证完成后手动移动文件?
非常感谢您的帮助。
【问题讨论】:
标签: javascript multipartform-data multer
有多种方法可以做到这一点。您可以在 Multer 之前使用自定义中间件进行验证,或者您可以直接在 Multer 中管理验证。 以下是使用默认 DiskStorage 的示例:
const storage = multer.diskStorage({
destination: function (req, file, cb) {
const valid = ...; // your validation logic
if (valid) cb(null, '/tmp/my-uploads');
else cb(new Error('Validation failed.'));
},
});
const upload = multer({ storage: storage });
如果需要更多控制,可以使用 MemoryStorage:
const storage = multer.memoryStorage();
const upload = multer({ storage: storage });
app.post('/xyz', upload.single('file'), (req, res) => {
// because of memoryStorage, the file will be available in a buffer
// do your validation logic here, and when you are happy write the buffer to the disk
});
在docs 中阅读有关存储的更多信息。
【讨论】: