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

Next.js 13.4.x版本使用multer上传文件无法读取数据求助

Next.js 13.4.9 二进制文件上传解决方案(替代multer)

Next.js 13 App Router的API路由使用Web标准Request对象,而multer依赖Node.js原生http.IncomingMessage结构,两者不兼容,导致multer无法解析文件和表单数据。无需自定义Express服务器,直接用Web标准API即可解决。

客户端代码无需修改,以下是修正后的服务端实现:

修正后的服务端代码(/app/api/upload/route.ts)

import { NextResponse } from 'next/server';

export async function POST(req: Request) {
  try {
    // 解析FormData(Web标准API)
    const formData = await req.formData();
    
    // 获取上传的音频文件
    const audioFile = formData.get('audio') as File;
    // 将File对象转为Node.js Buffer
    const audioBuffer = Buffer.from(await audioFile.arrayBuffer());
    
    // 获取并解析JSON文本数据
    const jsonDataStr = formData.get('data') as string;
    const jsonData = JSON.parse(jsonDataStr);
    
    // 调试输出
    console.log('文件名:', audioFile.name);
    console.log('文件大小:', audioFile.size);
    console.log('采样率:', jsonData.sampleRate);
    console.log('Buffer长度:', audioBuffer.length);
    
    return NextResponse.json({
      success: true,
      fileName: audioFile.name,
      sampleRate: jsonData.sampleRate
    }, { status: 200 });
  } catch (error) {
    console.error('上传处理失败:', error);
    return NextResponse.json({
      success: false,
      message: '上传处理失败'
    }, { status: 500 });
  }
}

关键说明

  • 移除multer依赖:直接使用Web标准req.formData()解析表单,无需multer或busboy
  • 处理文件数据:通过formData.get('audio')获取File对象,再转为Node.js Buffer用于后续处理
  • 删除无效配置:原export const config是Pages Router的专属配置,App Router中无需设置,直接删除即可

测试验证

点击上传按钮后,服务端控制台会输出文件信息和JSON数据,客户端会收到成功响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:41:21