当前位置:网站首页 >  百科

Web服务文件上传全限制实操:格式/大小/类型/路径控制指南

时间:2026年06月09日 16:24:02 来源:易频IT社区

前置准备

1. 安装Node.js(直接下载LTS版本:https://nodejs.org/),安装后执行以下命令验证:

node -vnpm -v,出现版本号说明安装成功。

2. 初始化项目:新建文件夹upload-demo,进入后执行npm init -y自动生成package.json。

3. 安装依赖:执行npm install express multer --save(express为后端框架,multer为文件上传中间件)。

核心实现:文件上传全限制

1. 限制文件格式

在项目根目录新建app.js,写入完整代码(直接复制可用):

``` const express = require('express'); const multer = require('multer'); const app = express(); // 定义允许的MIME类型(格式白名单) const allowedMimes = ['image/jpeg', 'image/png', 'application/pdf']; ```

添加文件格式过滤配置:

``` // 初始化上传中间件并启用格式过滤 const upload = multer({ dest: 'uploads/', // 临时存储目录 fileFilter: (req, file, cb) => { if (allowedMimes.includes(file.mimetype)) { cb(null, true); } else { cb(new Error('仅允许上传JPG、PNG、PDF格式文件')); } } }); ```

allowedMimes数组可按需调整,添加/删除对应MIME类型即可扩展支持格式

2. 限制文件大小

Web服务文件上传全限制实操:格式/大小/类型/路径控制指南

修改multer配置,添加文件大小限制(以5MB为例):

``` const upload = multer({ dest: 'uploads/', limits: { fileSize: 5 1024 1024 }, // 单文件最大5MB,单位为字节 fileFilter: (req, file, cb) => { if (allowedMimes.includes(file.mimetype)) { cb(null, true); } else { cb(new Error('仅允许上传JPG、PNG、PDF格式文件')); } } }); ```

510241024可替换为其他数值,如210241024表示2MB

3. 限制存储路径与文件名(防覆盖+防非法路径)

替换默认dest配置为自定义存储规则,避免直接暴露临时目录、防止同名文件覆盖:

``` const path = require('path'); const fs = require('fs'); // 自定义存储规则 const storage = multer.diskStorage({ destination: (req, file, cb) => { // 固定安全上传目录,避免跨目录访问 const safeDir = path.join(__dirname, 'secure-uploads'); // 自动创建不存在的目录 if (!fs.existsSync(safeDir)) fs.mkdirSync(safeDir, { recursive: true }); cb(null, safeDir); }, filename: (req, file, cb) => { // 生成唯一文件名:时间戳+随机字符串+原扩展名,防止覆盖 const ext = path.extname(file.originalname); const uniqueName = `${Date.now()}-${Math.random().toString(36).slice(2)}${ext}`; cb(null, uniqueName); } }); // 更新multer配置为自定义存储 const upload = multer({ storage: storage, limits: { fileSize: 5 1024 1024 }, fileFilter: (req, file, cb) => { if (allowedMimes.includes(file.mimetype)) { cb(null, true); } else { cb(new Error('仅允许上传JPG、PNG、PDF格式文件')); } } }); ```

4. 前后端对接完整流程

新建前端页面index.html,用于上传文件:

```
```

在app.js末尾添加上传路由与服务启动代码:

``` // 处理文件上传请求 app.post('/upload', upload.single('file'), (req, res) => { res.send(`文件上传成功!存储路径:${req.file.path}`); }); // 启动服务(端口3000) app.listen(3000, () => console.log('服务启动:http://localhost:3000')); ```

测试与异常处理

1. 功能测试步骤

执行命令node app.js,打开浏览器访问http://localhost:3000,测试三种场景:

  • 测试允许文件(JPG/PNG/PDF且<5MB):上传成功,返回存储路径
  • 测试非法格式(如TXT、EXE):返回格式限制错误
  • 测试超大文件(>5MB):返回大小超限错误

2. 全局错误处理(防服务崩溃)

在app.js最末尾添加错误处理中间件,返回用户友好提示:

``` // 全局错误处理,避免服务崩溃 app.use((err, req, res, next) => { if (err instanceof multer.MulterError && err.code === 'LIMIT_FILE_SIZE') { return res.send('错误:文件大小超过5MB限制'); } res.send(`错误:${err.message}`); }); ```

此代码专门处理multer的内置错误,不会暴露底层服务敏感信息,保证服务稳定运行

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图