You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Multer实现图片大小(≤1MB)与格式(jpg/jpeg/png)验证

Multer图片上传验证实现方案

1. 更新Multer存储配置文件

在你的上传配置文件中,新增文件格式校验和大小限制逻辑,修改后代码如下:

const multer = require("multer");
const path = require("path");
const shortid = require("shortid");

const diskStorage = multer.diskStorage({    
    destination: (req, file, cb) =>{
        cb(null, 'imagens')
    },
    filename: (req, file, cb) =>{
        cb(null, Date.now() + shortid.generate() + path.extname(file.originalname));
    }
});

// 图片格式验证:仅允许jpg/jpeg/png
const fileFilter = (req, file, cb) => {
    const allowedExtensions = ['.jpg', '.jpeg', '.png'];
    const fileExt = path.extname(file.originalname).toLowerCase();
    if (allowedExtensions.includes(fileExt)) {
        cb(null, true);
    } else {
        cb(new Error("仅允许上传.jpg、.jpeg、.png格式的图片"));
    }
};

// 图片大小限制:1MB(1024*1024字节)
const limits = {
    fileSize: 1024 * 1024
};

module.exports = {
    storage: diskStorage,
    fileFilter,
    limits
};

2. 修改路由处理逻辑

更新路由中的Multer初始化方式,并添加错误捕获,统一处理各类验证失败情况:

const uploadConfig = require("../classes/uploadImagem");
const multer = require("multer");
const upload = multer(uploadConfig);

router.post("/criarconta", async(req, res) =>{
    try {
        // 包装Multer中间件,捕获验证错误
        await new Promise((resolve, reject) => {
            upload.fields([{ name: "photos" }])(req, res, (err) => {
                err ? reject(err) : resolve();
            });
        });

        let files = [];
        if (req.files?.photos) {
            files = req.files.photos;
        }

        let photos = [];
        if (files.length > 0) {
            files.forEach((photo, i) => {
                photos[i] = photo.path;
            });
        }

        // 单图片限制校验
        if (files.length > 1) {
            return res.status(400).json({ erro: "Não é permitido o upload de mais de 1 imagem!" });
        }

        return res.status(200).json({ erro: null, foto: photos });

    } catch (err) {
        return res.status(400).json({ erro: err.message });
    }
});

核心说明

  • 格式验证通过fileFilter实现,在文件存储前校验扩展名,不符合规则直接抛出错误
  • 大小限制通过limits.fileSize设置,超过1MB时Multer自动抛出错误
  • 用Promise包装Multer中间件,配合async/await捕获所有验证错误,统一返回JSON格式的错误提示

内容的提问来源于stack exchange,提问作者Henrique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:35:13