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

@google/genai SDK中ai.files.upload方法忽略abortSignal未抛出异常问题咨询

AbortController not working with @google/genai files.upload in Vue.js

从你的代码和描述来看,这个问题大概率是**@google/genai SDK的files.upload方法没有正确实现AbortSignal的中断逻辑**,而非你的代码写法错误。以下是具体分析和解决方案:

为什么会出现这个现象?

  1. SDK内部未绑定AbortSignal到请求:
    很多SDK在封装上传逻辑时,可能没有把你传入的abortSignal真正关联到底层的网络请求(比如fetch或XMLHttpRequest)上。虽然你调用了abort()让signal.aborted变为true,但SDK的上传流程根本没监听这个信号的变化,所以会继续执行直到上传完成。

  2. 小Blob导致上传过快:
    你用的是极小的测试Blob,可能在你点击“Abort”按钮时,上传请求已经在本地处理完成甚至发送到服务器了,这时候再触发abort当然不会有效果。不过你提到“能快速点击取消”却依然上传成功,这个可能性比较小,但可以用大文件验证排除。

验证与排查步骤

  • 测试大体积文件:生成一个几MB的Blob(比如new Blob([new ArrayBuffer(1024*1024*5)], { type: "audio/mp3" })),这样上传耗时更长,给你足够的时间触发abort,看是否依然会完成上传。
  • 核对SDK文档参数:再次确认files.upload的参数说明,是否abortSignal确实应该放在config对象里。有些SDK可能要求直接把signal作为顶层参数传入,而非嵌套在config中。
  • 查看SDK源码:如果有条件,可以查看@google/genai的files.upload实现代码,看它是否在内部请求中使用了传入的abortSignal。如果没有,那就是明确的SDK bug。

临时解决方案(Workaround)

如果暂时等不到SDK修复,可以在上传完成后手动检查信号状态,主动抛出AbortError:

async function sendRequest() {
  abortController = new AbortController();
  try {
    console.log("Uploading blob");
    const mockAudioBlob = new Blob(["fake audio bytes"], { type: "audio/mp3" });
    const myFile = await ai.files.upload({ 
      file: mockAudioBlob, 
      config: { abortSignal: abortController.signal } 
    });
    
    // 手动检查信号是否已中止
    if (abortController.signal.aborted) {
      throw new DOMException("Request was aborted", "AbortError");
    }
    
    result.value = myFile.uri;
    console.log(myFile.uri);
    console.log("Aborted? " + abortController.signal.aborted);
  } catch (e) {
    if (e && e.name === "AbortError") {
      console.log("Request was aborted");
    } else {
      console.log(e);
    }
  } finally {
    abortController = null;
  }
}

这个方法虽然不能真正中断上传进程(因为请求已经发出去了),但可以在前端层面模拟预期的中断行为,避免处理已取消的上传结果。

结论

这个现象更倾向于SDK的bug,建议你去Google GenAI SDK的官方仓库提交issue,描述清楚你的复现步骤和代码,让官方团队修复这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 06:38:09