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

使用Google Docs REST API batchUpdate替换图片遇权限禁止错误

Google Docs API批量替换图片权限异常问题

问题背景

使用Google Docs REST API的batchUpdate接口替换Docs文件内图片,最初遇到的权限错误已通过相关方案解决,但近期未修改代码的情况下,相同权限错误再次出现。当前必须使用服务账号操作,且目标图片权限仍设置为「任何人可通过链接访问」。

报错信息

error={message=Invalid requests[12].replaceImage: Access to the provided image was forbidden., code=400.0, status=INVALID_ARGUMENT}

代码片段

function postGoogleAPI(url, payload){
  var service = getOAuthService();
  service.reset();

  var response = UrlFetchApp.fetch(url, {
    method: "POST",
    contentType : "application/json",
    headers: {
      Authorization: 'Bearer ' + service.getAccessToken() // 获取访问令牌的函数
    },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  });

  return JSON.parse(response);
}

function getGoogleAPI(url) {
  var service = getOAuthService();
  service.reset();

  var response = UrlFetchApp.fetch(url, {
    headers: {
      Authorization: 'Bearer ' + service.getAccessToken() // 获取访问令牌的函数
    },
    muteHttpExceptions: true
  });

  return response;
}

function getReplaceImageRequest(imageFileId, docsFileId, mergeField) {
  let requestData = [];

  let url = Utilities.formatString("https://www.googleapis.com/drive/v3/files/%s?supportsAllDrives=true&fields=webContentLink", imageFileId);
  let response = getGoogleAPI(url);

  let logoUri = JSON.parse(response).webContentLink

  url = Utilities.formatString("https://docs.googleapis.com/v1/documents/%s?fields=inlineObjects", docsFileId);
  response = getGoogleAPI(url);

  let inlineObjects = JSON.parse(response.getContentText()); 

  for(const key in inlineObjects.inlineObjects){
    let title = inlineObjects.inlineObjects[key].inlineObjectProperties.embeddedObject.title;

    if(title != null && title == mergeField){
      requestData.push({
        "replaceImage": {
          "imageObjectId": key,
          "uri": logoUri,
          "imageReplaceMethod": "CENTER_CROP"
        }
      });
    }
  }

  return requestData;
}

getReplaceImageRequest(<图片文件ID>, <Docs文件ID>, <合并字段标识>);

let url = "https://docs.googleapis.com/v1/documents/<Docs文件ID>:batchUpdate";
let payload = {
    "requests" : requests
}
  
let response = postGoogleAPI(url, payload); // 错误发生在此处

已尝试操作

  • 手动重置图片的公开访问权限,无效果
  • 上传新图片后,接口恢复正常功能

恳请各位提供解决方案,感谢!


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:17:39