使用 Google Apps 脚本将 json 对象上传到 Google 云存储

Upload json object to Google Cloud Storage with Google Apps Script

我正在 Google Apps 脚本中调用 API。响应是一个 json 对象。我想将它发送到 Google 云存储。

这是我目前编写的脚本:

function uploadToGoogleCloudStorage() {

  var api_response = '{ "var":"value"}'
  var url = 'https://storage.googleapis.com/storage/v1/b/my_bucket_name/o/test?fields=OBJECT'.replace("OBJECT", JSON.stringify(api_response))

  var response = UrlFetchApp.fetch(url, {
    method: "POST"
  });

}

我有以下错误Exception: Invalid argument: https://storage.googleapis.com/storage/v1/b/gtm_container_export/o/test?fields="{%20\"var\":\"value\"}"

我没有找到任何关于如何通过 Google Apps 脚本与 Google 云存储交互的文档。我想知道 UrlFetchApp 是否是正确的方法,或者我是否应该激活特定服务。

这是一个基本的例子 - 你的方法只需要稍微修改一下:

function uploadToGoogleCloudStorage() {

  let url = "https://storage.googleapis.com/upload/storage/v1/b/[replace this with your bucket ID]/o?uploadType=media&name=my_test_json.json";

  let token = "Bearer [replace this with your oauth token!]";
 
  // this is the content of the document we will create in the bucket
  let data = {
    'name': 'Bob Smith',
    'age': 35,
    'pets': ['fido', 'fluffy']
  };

  let options = {
    'method' : 'post',
    'headers' : {
      'Authorization' : token
    },
    'contentType': 'application/json',
    // Convert the JavaScript object to a JSON string.
    'payload' : JSON.stringify(data)
  };
  var response = UrlFetchApp.fetch(url, options);

  console.log( response.getResponseCode() ); // 200 OK
  console.log( response.getContentText() );

}

在这种情况下,存储桶中的文件名为“my_test_json.json”,如 name=my_test_json.json 中所定义。

[replace this with your bucket ID] 替换为您的存储桶 ID。

[replace this with your oauth token!] 替换为您的 oauth 令牌。

如果您不熟悉令牌,那是一个相当大的话题,超出了本问题的范围。但如果它有帮助,这里有一些非常基本的注意事项:为了生成测试令牌,我使用 OAuth 2.0 Playground 创建了一个测试令牌。我选择了“云存储 API”read/write 范围。在第 2 步之后,我将 copy/pasted access_token 字符串从页面右侧的“响应”框中取出。该字符串的长度超过 300 个字符。这不是生产强度的解决方案 - 它仅用于测试。