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

API调用时出现BadArgument及JSON解析错误求助

解决fetch调用API时的BadArgument与JSON解析错误问题

你遇到的核心问题很明确:远程API根本无法访问你传入的本地file://路径——这个路径是你设备私有存储的本地路径,API服务器没有权限也不可能读取到你设备里的文件,所以服务器返回了BadArgument错误,而且返回的内容大概率不是合法JSON格式,这就直接导致了后续的JSON解析失败。

下面是具体的解决思路和可落地的代码示例:

正确的处理方式:将本地图片转为可传输格式发送

你需要把本地图片转换成Blob或者Base64编码,作为请求体的一部分发送给API,而不是直接传递本地文件路径。

方案1:用Blob+FormData发送(推荐,适配多数接收图片的API)

export default {
  processImage: async (image) => {
    // 替换成你的有效订阅密钥
    const subscriptionKey = "你的订阅密钥";
    try {
      // 先读取本地图片为Blob对象
      const localRes = await fetch(image);
      const imageBlob = await localRes.blob();

      // 构造FormData,用于传输二进制文件
      const formData = new FormData();
      // 第三个参数是文件名,可根据API要求自定义
      formData.append("image", imageBlob, "uploaded-photo.jpg");

      // 发起API请求
      const apiRes = await fetch("你的API接口地址", {
        method: "POST",
        headers: {
          "Ocp-Apim-Subscription-Key": subscriptionKey,
          // 注意:multipart/form-data的Content-Type会由浏览器自动生成,无需手动设置
        },
        body: formData,
      });

      // 检查响应状态是否正常
      if (!apiRes.ok) {
        throw new Error(`API请求失败:${apiRes.statusText}`);
      }

      // 解析JSON响应
      const result = await apiRes.json();
      return result;
    } catch (error) {
      console.error("图片处理出错:", error);
      throw error;
    }
  },
};

方案2:用Base64编码发送(适合要求传字符串格式的API)

export default {
  processImage: async (image) => {
    const subscriptionKey = "你的订阅密钥";
    try {
      // 读取本地图片并转为Base64字符串
      const localRes = await fetch(image);
      const blob = await localRes.blob();
      const base64Str = await new Promise((resolve) => {
        const reader = new FileReader();
        reader.onloadend = () => resolve(reader.result);
        reader.readAsDataURL(blob);
      });

      // 发起API请求,将Base64字符串放入请求体
      const apiRes = await fetch("你的API接口地址", {
        method: "POST",
        headers: {
          "Ocp-Apim-Subscription-Key": subscriptionKey,
          "Content-Type": "application/json",
        },
        body: JSON.stringify({
          // 请根据API文档要求调整字段名
          imageData: base64Str,
        }),
      });

      if (!apiRes.ok) {
        throw new Error(`API请求失败:${apiRes.statusText}`);
      }

      const result = await apiRes.json();
      return result;
    } catch (error) {
      console.error("图片处理出错:", error);
      throw error;
    }
  },
};

额外排查建议

  • 先确认你的API支持接收哪种格式的图片(Blob/FormData或Base64),对照API文档调整请求体结构和请求头。
  • 如果还是出现JSON解析错误,可以先把响应转为文本(await apiRes.text())查看具体错误内容,这能帮你更快定位服务器返回的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:47:37