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

Node.js使用express-fileupload上传超70MB视频故障及优化方案咨询

问题根因排查

首先确认两个配置项是否正确:

  • 你当前只做了业务层的文件大小校验,没有在express-fileupload初始化时开启临时文件配置和全局大小限制,该模块默认将小于50MB的文件存入内存,超过阈值后如果没有开启useTempFiles参数,会触发内存溢出导致进程无响应,看起来就是请求陷入无限循环
  • 未调整express内置bodyParser的大小限制,bodyParser默认请求大小限制为100kb,会早于上传中间件拦截大文件请求,导致后续逻辑不生效
现有方案修复步骤
  1. 调整express-fileupload初始化配置:
const fileUpload = require('express-fileupload');
app.use(fileUpload({
  limits: { fileSize: 100 * 1024 * 1024 }, // 全局100MB大小限制,提前拦截超限请求
  useTempFiles: true, // 大文件写入临时磁盘,不占用内存
  tempFileDir: './tmp', // 提前创建好该目录,给足读写权限
  abortOnLimit: true // 超过大小直接终止请求,返回413错误
}));
  1. 调整express解析器的大小限制,需要放在路由注册前执行:
app.use(express.json({ limit: '150mb' }));
app.use(express.urlencoded({ extended: true, limit: '150mb' }));
更稳定的替代实现

推荐使用express官方维护的multer中间件,大文件上传稳定性、社区生态都优于express-fileupload,直接在配置层面完成大小、格式校验,无需额外写业务判断:

const multer = require('multer');

// 配置磁盘存储路径、文件名规则
const storage = multer.diskStorage({
  destination: (req, file, cb) => cb(null, './uploads/'),
  filename: (req, file, cb) => {
    const ext = file.mimetype.split('/')[1].toLowerCase();
    cb(null, `${Date.now()}-${Math.random().toString(36).slice(2)}.${ext}`);
  }
});

// 全局上传规则配置
const upload = multer({
  storage,
  limits: { fileSize: 100 * 1024 * 1024 }, // 100MB大小限制
  fileFilter: (req, file, cb) => {
    const ext = file.mimetype.split('/')[1].toLowerCase();
    if (ext !== 'mp4') return cb(new Error('仅支持MP4格式视频'));
    cb(null, true);
  }
});

// 路由使用示例
app.post('/upload/video', upload.single('video'), (req, res) => {
  // req.file 包含上传完成的文件所有信息
  res.json({ code: 200, msg: '上传成功', filePath: req.file.path });
});
上传速度优化方案
  • 前端分片上传:将视频切成2-5MB的分片并行上传,后端接收完成后合并文件,支持断点续传,避免网络波动导致全文件重传,大幅提升大文件上传成功率和速度
  • 前端预压缩:上传前前端对视频进行分辨率、码率压缩,降低实际需要传输的文件体积
  • 生产环境可对接对象存储服务的直传接口,无需经过后端服务转发,进一步降低传输链路耗时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:24:04