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

Next.js API 上传大文件时请求挂起问题求助

解决Next.js API路由大文件Multipart请求挂起问题

问题本质

你设置了bodyParser: false和responseLimit: false但大文件请求仍挂起,核心原因是:禁用自动解析后,你没有手动处理multipart请求体的数据流。Next.js不会自动读取请求内容,客户端会一直等待服务器读取完数据并返回响应,导致请求长时间挂起。

解决方案

需要手动解析multipart格式的请求体,这里以formidable库为例(适配TS环境):

1. 安装依赖

npm install formidable @types/formidable

2. 修改API端点代码

import type { NextApiRequest, NextApiResponse } from 'next';
import formidable from 'formidable';

export const config = {
  api: {
    externalResolver: true,
    bodyParser: false,
    responseLimit: false
  }
};

export default async (req: NextApiRequest, res: NextApiResponse) => {
  if (req.method !== 'POST') {
    return res.status(405).end('Method Not Allowed');
  }

  const form = formidable({
    // 可自定义配置,比如设置文件最大限制:
    // maxFileSize: 100 * 1024 * 1024 // 允许100MB文件
  });

  // 手动解析请求体,消费数据流
  form.parse(req, (err, fields, files) => {
    if (err) {
      console.error('请求体解析失败:', err);
      return res.status(500).end('解析失败');
    }

    console.log('OK');
    console.log('表单字段:', fields);
    console.log('上传文件:', files);
    
    // 解析完成后返回响应,结束请求
    res.status(200).end('文件上传处理完成');
  });
};

关键说明

  • bodyParser: false确实禁用了Next.js自动解析,但此时必须手动处理请求流,否则客户端会因未收到响应而挂起。
  • externalResolver: true要保留,告诉Next.js由你负责处理响应逻辑,避免框架触发超时判定。
  • 也可以用busboy等其他multipart解析库,核心逻辑都是必须读取并消费完请求体数据流,再返回响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:26:07