上传前在 Multer 中验证

Validate in Multer before upload

我正在尝试验证我收到的 idProject 是否是一个 ObjectId,或者它是否存在于我的数据库中,然后再使用 Multer 上传文件。但是它保存文件然后验证。

我试过像 app.post('/file', ()=>) 这样的索引,它可以工作,但我想将它保留在 .controller.js 和 .route.js

const storage = multer.diskStorage({
    destination: path.resolve('./uploads'),
    filename: (req, file, cb, filename) => {
        cb(null, uuid() + path.extname(file.originalname));
    }
});
app.use(multer({storage: storage}).single('file'));

projectCtrl.addFileToProject = async (req, res) => {
    const { id } = req.params;
    await Project.findById(id)
        .then((project) => {
            if(project === null){
                res.json({
                    status: 'Fail to Add File 1'
                });
            }
            else{
                fileCtrl.uploadFile(req, async (cb) => {
                    await Project.findByIdAndUpdate(id, {$addToSet: {files: cb}})
                });
                res.json({
                    status: 'File Added to Project'
                });
            }
        })
        .catch(() => {
            res.json({
                status: 'Fail to Add File 2'
            });
        });
};

使用 multer,您无法真正动态控制上传。 但是,您可以做的是将其上传到一个临时文件夹中,然后检查该 ID 是否存在。如果它存在于您的数据库中,您可以将该文件移动到另一个文件夹中,否则,删除该文件