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

Node.js使用Axios上传本地文件至远程端点遇400错误求助

解决Node.js Axios上传文件返回400错误的常见方案

以下是针对你遇到的400错误的几个排查方向和修复方法:

  • 移除fs.createReadStream前的await
    fs.createReadStream是同步方法,返回的是Readable流而非Promise,加await会导致流对象异常,后端无法解析文件。修改后:

    const fileStream = fs.createReadStream('./pathtofile.ext'); // 去掉await
    
  • 统一async/await语法,避免混合使用then/catch
    你的代码同时用了try/catch和then/catch,可能导致错误捕获不完整,建议统一用async/await:

    try {
        const fileStream = fs.createReadStream('./pathtofile.ext');
        let formData = new FormData();
        formData.append('myFile', fileStream, 'actual-filename.ext'); // 第三个参数用真实文件名
        const res = await axios.post('https://my.endpoint.com', formData, {
            headers: {
                ...formData.getHeaders(),
            }
        });
        console.log(res.data);
    } catch(err) {
        console.error(err);
    }
    
  • 确认formData.append的文件名参数正确
    第三个参数应该是纯文件名(比如photo.jpg),而非文件路径。如果后端对文件名格式有要求(比如不能包含路径分隔符),传递路径会导致解析失败。

  • 检查Content-Type是否包含boundary
    部分版本的form-data库生成的headers可能缺少boundary,你可以手动打印formData.getHeaders()确认。如果确实没有,可手动补充:

    const headers = formData.getHeaders();
    headers['Content-Type'] = headers['Content-Type'] + `; boundary=${formData.getBoundary()}`;
    // 然后在axios的headers里使用这个headers对象
    
  • 验证后端接收的字段名
    确认后端接口期望的文件字段名是myFile,如果后端用的是其他名称(比如file、upload_file),需要修改formData.append的第一个参数为对应名称。

  • 升级依赖版本
    旧版本的axios或form-data可能存在兼容性问题,尝试升级到最新稳定版:

    npm update axios form-data
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:30:58