Я ломал голову над этим уже более дня, но не могу понять, как загрузить данные в Google Cloud Storage с помощью скрипта приложения, прикрепленного к листу Google. У меня были проблемы с авторизацией. Я скопировал метод 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');
}
}
Я создал учетные данные OAUTH для веб-приложения в Google Cloud Console. Я также включил API Cloud Storage и Google Cloud Storage JSON API. Я не уверен, однако, на URL перенаправления. (В идеале я хотел бы использовать служебную учетную запись, потому что я просто хочу взять значения из электронной таблицы и загрузить их в виде файла JSON.)
В любом случае, благодарю за помощь!