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
相关产品推荐
相关产品推荐

