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

Node.js环境下如何通过Axios向API发送音频文件?

Node.js环境Axios上传音频文件到FastAPI问题解决方案

存在的问题

  • 手动硬写Content-Type: multipart/form-data请求头,缺失表单必须的boundary分隔符参数,后端无法正确拆分解析表单字段
  • 未显式指定上传文件的文件名,FastAPI的UploadFile对象可能无法正确获取文件元信息
  • Node.js环境默认没有内置FormData实现,依赖第三方form-data包时未使用该包提供的方法生成正确的请求头
  • 缺少错误捕获逻辑,无法定位文件不存在、接口报错等具体问题

修复步骤

  1. 先安装必要依赖:
npm install axios form-data
  1. 修正后的前端代码:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:06:05