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

使用IBM Cloud API时如何发送apikey?Angular调用语音转文字接口问题

你当前的API密钥传递方式不符合IBM Cloud服务的认证规范,属于错误写法,同时代码还有其他会导致调用失败的问题,具体修正方案如下:

核心错误说明

IBM Cloud的所有Watson系列API(你当前调用的是文本转语音API,不是你描述的语音转文本,属于笔误)的API密钥认证要求使用Basic Auth认证规则:

  • 需要先把字符串apikey:<你的实际API密钥>整体做Base64编码
  • 编码后的字符串前拼接Basic 前缀,再放到Authorization请求头中
  • 你当前直接将未编码的apikey:xxx放在请求头中,会直接触发401未授权错误

修正后的完整代码

getAudioFile (text: string) {
    // 生成符合要求的Basic认证头内容
    const authHeader = 'Basic ' + btoa('apikey:' + this.apiKey);
    return this.http.post(this.apiUrl, {
        text: text
      }, {
        headers: {
          'Content-Type' : 'application/json',
          'Accept' : 'audio/wav',
          'Authorization' : authHeader
        },
        params: {
          voice: 'en-US_AllisonV3Voice'
        },
        // 必须指定响应类型为blob,否则Angular默认将二进制音频当作JSON解析,直接抛出格式错误
        responseType: 'blob'
      }).pipe(
        map(res => {
          // 生成可直接用于audio标签播放的音频链接
          return URL.createObjectURL(res);
        }),
        catchError(this.handleError)
      )
  }

额外注意事项

  • 不要在前端生产环境代码中直接写死API密钥,前端代码可被用户抓包直接提取密钥,会导致你的IBM Cloud账号被盗用,产生不必要的资源消耗和费用,建议加一层后端代理,由后端携带API密钥调用IBM接口,前端仅调用自有后端接口即可。
  • 你原有代码的map操作仅打印响应结果没有返回值,会导致后续订阅该方法的逻辑拿不到可用的音频数据,上述代码已经调整为返回可直接使用的音频对象链接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:30:02