1. 安装Node.js(直接下载LTS版本:https://nodejs.org/),安装后执行以下命令验证:
node -v、npm -v,出现版本号说明安装成功。
2. 初始化项目:新建文件夹upload-demo,进入后执行npm init -y自动生成package.json。
3. 安装依赖:执行npm install express multer --save(express为后端框架,multer为文件上传中间件)。
在项目根目录新建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类型即可扩展支持格式。

修改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。
替换默认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格式文件')); } } }); ```新建前端页面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')); ```执行命令node app.js,打开浏览器访问http://localhost:3000,测试三种场景:
在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号 网站地图