首页 > web前端 > js教程 > 正文

使用 Multer 进行图片大小和类型验证

碧海醫心
发布: 2025-09-06 17:45:03
原创
888人浏览过

使用 multer 进行图片大小和类型验证

本文档详细介绍了如何使用 Multer 中间件在 Node.js 应用中实现图片上传的大小和类型验证。通过配置 Multer 的 limits 和 fileFilter 选项,可以有效地控制上传文件的尺寸和格式,从而确保服务器接收到的图片符合预期要求,避免潜在的安全风险和资源浪费。同时,本文还提供了错误处理中间件,以便更好地向客户端反馈上传过程中的问题。

Multer 图片上传验证详解

在使用 Multer 处理文件上传时,对上传文件的大小和类型进行验证是至关重要的。这不仅可以提高应用程序的安全性,还能优化服务器资源的使用。以下将详细介绍如何使用 Multer 实现这些验证。

1. 配置 Multer 实例

首先,需要配置 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));
  }
});

const upload = multer({
  storage: diskStorage,
  limits: {
    fileSize: 1 * 1024 * 1024 // 1MB
  },
  fileFilter: (req, file, cb) => {
    const acceptedExtensionsList = [".jpg", ".jpeg", ".png"];
    const extname = path.extname(file.originalname).toLowerCase();
    if (acceptedExtensionsList.includes(extname)) {
      cb(null, true); // Accept the file
    } else {
      cb(new Error("Invalid file extension"));
    }
  }
});
登录后复制
  • storage: 定义了文件的存储方式。上面的例子使用了 diskStorage,将文件存储在服务器的 imagens 目录下,并使用 shortid 生成唯一的文件名。
  • limits: 用于限制上传文件的大小。 fileSize: 1 * 1024 * 1024 表示限制文件大小为 1MB。
  • fileFilter: 用于过滤上传的文件类型。 在这个例子中,只允许上传 .jpg、.jpeg 和 .png 格式的图片。path.extname(file.originalname).toLowerCase() 获取文件扩展名并转换为小写,然后检查是否在允许的扩展名列表中。如果文件类型不符合要求,则调用 cb(new Error("Invalid file extension")) 拒绝上传。

2. 使用 Multer 中间件处理上传请求

路由处理函数中使用配置好的 Multer 中间件。

可图大模型
可图大模型

可图大模型(Kolors)是快手大模型团队自研打造的文生图AI大模型

可图大模型 32
查看详情 可图大模型
router.post("/criarconta", upload.fields([{ name: "photos" }]), async (req, res) => {
  var files = [];

  if (req.files) {
    files = req.files.photos;
  }

  if (files.length > 1) {
    return res.status(400).json({ erro: "Não é permitido o upload de mais de 1 imagem!" });
  }

  let photos = [];

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

  return res.status(200).json({ erro: null, foto: photos });
});
登录后复制
  • upload.fields([{ name: "photos" }]) 指定了上传字段的名称。 这里表示接受名为 "photos" 的字段上传的文件。

3. 错误处理

为了更好地处理上传过程中可能出现的错误,例如文件大小超出限制或文件类型不符合要求,可以添加一个错误处理中间件。

const errorHandler = (err, req, res, next) => {
  if (err instanceof multer.MulterError) {
    // Multer error occurred (e.g., file size limit exceeded)
    return res.status(400).json({ error: "File upload error: " + err.message });
  } else if (err.code === "LIMIT_FILE_SIZE") {
    // File size limit exceeded
    return res.status(400).json({ error: "File size limit exceeded. Max file size is 1MB." });
  } else {
    // Other errors
    return res.status(500).json({ error: "Internal server error" });
  }
};

app.use(errorHandler); // 确保errorHandler在所有路由之后定义
登录后复制
  • 这个错误处理中间件会捕获 Multer 抛出的错误,并根据错误类型返回相应的错误信息。 例如,如果文件大小超出限制,会返回 "File size limit exceeded. Max file size is 1MB." 的错误信息。 如果文件类型不符合要求,会返回 "Invalid file extension" 的错误信息。
  • 请确保将 errorHandler 中间件注册到应用程序中,并且在所有路由之后定义,以便能够捕获所有路由处理过程中可能发生的错误。

总结

通过配置 Multer 的 limits 和 fileFilter 选项,可以方便地实现文件大小和类型验证。添加错误处理中间件可以更好地向客户端反馈上传过程中出现的问题。 这些措施可以提高应用程序的安全性和用户体验。 记住,始终要对用户上传的文件进行验证,以防止潜在的安全风险。

以上就是使用 Multer 进行图片大小和类型验证的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号