【问题标题】:Disable automatic upload with Multer使用 Multer 禁用自动上传
【发布时间】:2021-12-25 15:41:12
【问题描述】:

我是第一次使用 multer,我注意到图像总是被上传。

现在我的问题是我想用 Joi 对请求的正文进行一些数据验证,然后如果数据验证成功,则将文件移动到相应的文件夹中。

使用 Multer 是否可行?您将如何实现?

或者,有没有办法通过 Multer 禁用自动上传,并在数据验证完成后手动移动文件?

非常感谢您的帮助。

【问题讨论】:

    标签: javascript multipartform-data multer


    【解决方案1】:

    有多种方法可以做到这一点。您可以在 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 中阅读有关存储的更多信息。

    【讨论】:

    • 您好,感谢您的回答。实际上,我已经在 multer 上看到了 diskStorage 方法,但在我的情况下它并没有真正起作用。我有多个 Express 路由,我想在每次有 POST 端点时检查我的请求正文的数据并使用 Joi 验证数据(使用不同的模式)。可悲的是,您的回答我认为我做不到,您能否告诉我更多有关中间件选项的信息,因为我试图这样做但没有成功?非常感谢
    • @Kayoshi 我已经用一个可能更适合您需求的示例编辑了我的答案
    猜你喜欢
    • 1970-01-01
    • 2021-05-30
    • 2019-05-16
    • 2019-07-31
    • 2018-02-14
    • 2020-12-31
    • 2019-03-10
    • 2016-06-03
    相关资源
    最近更新 更多