Google apps script 从应用程序脚本上传到谷歌云存储

Google apps script 从应用程序脚本上传到谷歌云存储,google-apps-script,google-sheets,google-cloud-storage,google-oauth,google-authentication,Google Apps Script,Google Sheets,Google Cloud Storage,Google Oauth,Google Authentication,一天多来,我一直在为此头疼,但我不知道如何通过附在谷歌工作表上的应用程序脚本将数据上传到谷歌云存储。我遇到了授权方面的问题。我已从(粘贴在下面)复制了getService方法,但该服务始终无法收到授权service.hasAccess()始终返回false function uploadFileToGCS(dataJSON) { var service = getService(); if (!service.hasAccess()) { Browser.msgBox("Fai

一天多来,我一直在为此头疼,但我不知道如何通过附在谷歌工作表上的应用程序脚本将数据上传到谷歌云存储。我遇到了授权方面的问题。我已从(粘贴在下面)复制了
getService
方法,但该服务始终无法收到授权
service.hasAccess()
始终返回false

function uploadFileToGCS(dataJSON) {

  var service = getService();
  if (!service.hasAccess()) {
    Browser.msgBox("Failed to grant service access")
    return;
  }

  var url = 'https://www.googleapis.com/upload/storage/v1/b/BUCKET/o?uploadType=media&name=FILE'
    .replace("BUCKET", params.BUCKET_NAME)
    .replace("FILE", encodeURIComponent(params.FILE_PATH));

  var response = UrlFetchApp.fetch(url, {
    method: "POST",
    payload: dataJSON,
    contentType: "application/json",
    headers: {
      Authorization: 'Bearer ' + service.getAccessToken()
    }
  });

  var result = JSON.parse(response.getContentText());
  Logger.log(JSON.stringify(result, null, 2));
}

function getService() {
  return OAuth2.createService('ctrlq')
    .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
    .setTokenUrl('https://accounts.google.com/o/oauth2/token')
    .setClientId(params.CLIENT_ID)
    .setClientSecret(params.CLIENT_SECRET)
    .setCallbackFunction('authCallback')
    .setPropertyStore(PropertiesService.getUserProperties())
    .setScope('https://www.googleapis.com/auth/devstorage.read_write')
    .setParam('access_type', 'offline')
    .setParam('approval_prompt', 'force')
    .setParam('login_hint', Session.getActiveUser().getEmail());
}

function authCallback(request) {
  var service = getService();
  var authorized = service.handleCallback(request);
  if (authorized) {
    return HtmlService.createHtmlOutput('Connected to Google Cloud Storage');
  } else {
    return HtmlService.createHtmlOutput('Access Denied');
  }
}
我已经在Google云控制台上为web应用程序创建了OAUTH凭据。我还启用了云存储API和Google云存储JSON API。但是我不确定重定向URL。(理想情况下,我希望使用服务帐户,因为我只想从电子表格中获取值并将其作为JSON文件上传。)


无论如何,谢谢你的帮助

我认为谷歌应用脚本项目和谷歌云项目应该链接起来。您需要创建一个google cloud项目来使用此API。

我认为google应用程序脚本项目和google cloud项目应该链接起来。您需要创建一个google cloud项目来使用此API。

当我想在云存储中复制一个对象时,我遇到了类似的问题。不确定这是否是你的解决方案,但我把它放在这里,以防有人需要它

只需将XML formmatted REST API与OAuth2令牌一起使用,代码如下所示:

var objectSource=“SOURCE\u BUCKET\u NAME/SOURCE\u OBJECT\u NAME”;
变量url=”https://storage.googleapis.com/DESTINATION_BUCKET_NAME/NAME_OF_COPY";
var resp=UrlFetchApp.fetch(url{
方法:“放”,
标题:{
授权:“持有人”+OAUTH2_令牌,
“x-goog-copy-source”:objectSource,
},
“muteHttpExceptions”:true,
});

查看云存储的文档以了解和之间的差异。

当我想在云存储中复制一个对象时,遇到了类似的问题。不确定这是否是你的解决方案,但我把它放在这里,以防有人需要它

只需将XML formmatted REST API与OAuth2令牌一起使用,代码如下所示:

var objectSource=“SOURCE\u BUCKET\u NAME/SOURCE\u OBJECT\u NAME”;
变量url=”https://storage.googleapis.com/DESTINATION_BUCKET_NAME/NAME_OF_COPY";
var resp=UrlFetchApp.fetch(url{
方法:“放”,
标题:{
授权:“持有人”+OAUTH2_令牌,
“x-goog-copy-source”:objectSource,
},
“muteHttpExceptions”:true,
});

查看云存储的文档以了解和之间的差异。

您是否已从
资源>云平台项目
菜单项将其绑定到GCP项目?@RafaGuillermo我相信存储资源和API凭据绑定到同一个项目您是否找到了解决方法?我也有同样的问题,我也有类似的问题。有一个使用“包含谷歌应用程序脚本项目密钥的重定向URL”创建密钥的方向,您是否已从
Resources>Cloud Platform project
菜单项将此绑定到GCP项目?@RafaGuillermo我相信存储资源和API凭据绑定到同一个项目您是否已找到解决方法?我也有同样的问题,我也有类似的问题。有一个使用“包含谷歌应用程序脚本项目密钥的重定向URL”创建密钥的方向,这可能需要检查。