Загрузить в хранилище Google Cloud из App Script - PullRequest
1 голос
/ 17 марта 2020

Я ломал голову над этим уже более дня, но не могу понять, как загрузить данные в 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.)

В любом случае, благодарю за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...