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

使用Axios调用Streamsb API时遇请求错误求助

排查Streamsb文件上传API的Axios调用问题

第一个错误:getaddrinfo ENOTFOUND ssuploader.streamsb.com

这个错误是因为硬编码的上传域名ssuploader.streamsb.com不存在或无法被DNS解析,你后续改成通过https://api.streamsb.com/api/upload/server获取动态上传服务器的思路是正确的——Streamsb的上传节点是动态分配的,不能直接固定域名。

第二个错误:AxiosError: Request failed with status code 400

400错误是请求格式不符合API要求,你的代码存在几个关键问题,修正方案如下:

1. 移除错误的Content-Type设置

你保留了之前的axiosConfig,手动设置了application/x-www-form-urlencoded,但使用FormData上传文件时,请求头应该是multipart/form-data(且需要自动生成的boundary分隔符)。手动覆盖头会导致服务器无法解析表单数据,直接删除这个配置即可,Axios会自动根据FormData生成正确的请求头。

2. Node.js环境下正确使用FormData

Node.js没有原生浏览器的FormData对象,需要先执行npm install form-data安装第三方包,再在代码中引入使用。

3. 文件上传需指定文件名

向FormData添加文件时,必须明确指定文件名,帮助服务器识别文件类型,否则会被判定为无效请求。

修正后的完整代码

const axios = require('axios');
const fs = require('fs');
const FormData = require('form-data'); // 引入form-data包

const API_KEY = '你的API密钥';

const file = __dirname + "/video/Video.mp4";
const fileStream = fs.createReadStream(file);

// 构建FormData
const formData = new FormData();
formData.append('api_key', API_KEY);
formData.append('file', fileStream, 'Video.mp4'); // 指定文件名参数

// 先获取上传服务器地址
axios.get(`https://api.streamsb.com/api/upload/server?key=${API_KEY}`)
  .then(result => {
    const uploadUrl = result.data.result;
    // 发送上传请求,无需手动设置Content-Type,Axios会自动处理
    return axios.post(uploadUrl, formData, {
      headers: formData.getHeaders() // 可选:用form-data的方法获取标准头,避免自动处理异常
    });
  })
  .then(uploadResult => {
    console.log('上传结果:', uploadResult.data);
  })
  .catch(err => {
    // 打印更详细的错误信息,方便排查
    console.error('错误详情:', err.response?.data || err.message);
  });

额外排查点

  • 确认API_KEY的正确性,密钥错误也会返回400
  • 检查文件路径是否正确,确保fs.createReadStream能正常读取文件
  • 打印result.data.result确认获取到的上传地址是完整有效的URL(格式类似https://xxx.streamsb.com/upload/xx)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:55:14