【发布时间】:2020-03-17 14:47:48
【问题描述】:
我已经为此苦恼了一天多,但我不知道如何通过附加到谷歌表格的应用程序脚本将数据上传到谷歌云存储。我一直遇到授权问题。我已经从here(粘贴在下面)复制了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 Cloud Console 上为网络应用创建了 OAUTH 凭据。我还启用了 Cloud Storage API 和 Google Cloud Storage JSON API。但是我不确定重定向 URL。 (理想情况下,我想使用服务帐户,因为我只想从电子表格中获取值并将它们作为 JSON 文件上传。)
无论如何,感谢您的帮助!
【问题讨论】:
-
您是否已通过
Resources > Cloud Platform Project菜单项将此绑定到 GCP 项目? -
@RafaGuillermo 我相信存储资源和API凭据绑定到同一个项目
-
你知道如何解决这个问题吗?我也有同样的问题。
-
我也有类似的问题。有一个使用“包含您的 Google Apps 脚本项目密钥的重定向 URL”创建密钥的方向,这可能需要检查。
标签: google-apps-script google-sheets google-cloud-storage google-oauth google-authentication