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

使用React Query下载Blob时createObjectURL调用报错问题

问题产生原因

核心错误是axios配置写法有误:

  • responseType: 'blob'是axios请求配置的一级属性,你当前代码把它错误写在了headers对象内部,axios无法识别该配置,会默认按文本/JSON格式解析响应内容,返回的结果不是浏览器原生Blob实例。
  • 控制台打印看起来结构和Blob类似,本质是普通JS对象,不满足createObjectURL的参数类型要求,因此触发重载失败的报错。
  • 额外的隐性问题:React Query的查询key写了固定字符串document-download,如果后续传入不同的文件下载地址,会命中同一份缓存,导致下载错文件。
修复方案

调整useDocuments里的axios配置,把responseType挪到配置根层级,同时修正查询key:

return useQuery<Blob, Error>(['document-download', apiUrl], async () => {
    const { data } = await axios.get<Blob>(apiUrl, {
      headers: {
        Authorization: currentUser,
      },
      // 注意:responseType 是axios的一级配置项,不要放在headers内
      responseType: 'blob',
    });
    return data;
  });

修复后可以通过console.log(data instanceof Blob)验证,返回true即代表拿到了正确的Blob实例,此时调用window.URL.createObjectURL(data)即可正常生成下载链接。

补充优化:文件下载完成、链接使用完毕后,记得调用window.URL.revokeObjectURL(href)释放占用的内存,避免不必要的内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:45:33