Node.js环境下如何通过Axios向API发送音频文件?
Node.js环境Axios上传音频文件到FastAPI问题解决方案
存在的问题
- 手动硬写
Content-Type: multipart/form-data请求头,缺失表单必须的boundary分隔符参数,后端无法正确拆分解析表单字段 - 未显式指定上传文件的文件名,FastAPI的
UploadFile对象可能无法正确获取文件元信息 - Node.js环境默认没有内置FormData实现,依赖第三方
form-data包时未使用该包提供的方法生成正确的请求头 - 缺少错误捕获逻辑,无法定位文件不存在、接口报错等具体问题
修复步骤
- 先安装必要依赖:
npm install axios form-data
- 修正后的前端代码:
const fs = require('fs') const axios = require('axios') const FormData = require('form-data') // 先判断本地音频文件是否存在,避免读空流 if (!fs.existsSync('./Welcome.wav')) { console.error('错误:音频文件不存在') process.exit(1) } const audioFile = fs.createReadStream("./Welcome.wav") const form = new FormData(); // 第三个参数显式指定文件名,匹配FastAPI UploadFile的解析规则 form.append("file", audioFile, { filename: "Welcome.wav" }); axios.post('https://speech2text-vitor.herokuapp.com/name', form, { headers: { // 调用form.getHeaders()自动生成带boundary的正确请求头 ...form.getHeaders() }, // 大文件上传时可放开body长度限制 maxBodyLength: Infinity } ) .then(result => { console.log('上传成功,返回结果:', result.data) }) .catch(err => { console.error('上传失败,错误信息:', err.response?.data || err.message) })
后端验证
你提供的FastAPI接口代码无需修改,前端请求格式正确后即可正常返回上传的文件名。
内容的提问来源于stack exchange,提问作者Olho
相关产品推荐
相关产品推荐

