【问题标题】:Google storage upload files in javascript谷歌存储在javascript中上传文件
【发布时间】:2016-06-06 22:11:26
【问题描述】:

我正在寻找将文件上传到存储桶的absolute minimal 要求。以及所需的最少代码。

我拥有的最少 oAuth/API 密钥信息来自 console.cloud.google.com/apis/credentials/oauthclient/

我不确定 apiKey 是否正确,但从示例中使用它不会引发错误:

  // This is triggered after the `client.js` loads
  function handleClientLoad() {
    gapi.client.setApiKey(apiKey);
    window.setTimeout(checkAuth,1);
  }

  function checkAuth() {
    gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true}, handleAuthResult);
  }

所以,这是第一步,但如果我错了,请纠正我。

现在处理 Auth Result:

  function handleAuthResult(authResult) {
    if (authResult && !authResult.error) {
      makeApiCall();
    }
  }

我有点卡住了,我正在处理一个例子:https://developers.google.com/api-client-library/javascript/start/start-js

当它到达gapi.client.plus.people 时它停止工作,其中people 未定义。这是因为我有一个匿名用户,并且有一个公共 API 密钥。稍后我将实现每个用户的 ACL,但现在我只需要它来工作/上传。

现在,我在 Amazon Cloud 上做了类似的工作,有一个简单的基于 jQuery 的小部件,可以上传文件,我只需要输入他们的 API-key 和存储桶名称(在 PHP不幸的是)。

我会很高兴只使用一个简单的<form>,但我遇到的示例中包含的信息/字段比上述 3 个最小数据(clientId、apiKey、范围)和存储桶的附加 url (像奇怪的加密 acl 字符串)

我知道bucket-name.storage.googleapis.com 是文件的最终位置,并且在我手动上传图片时有效。

我现在正在寻找绝对最小的代码,最好是 javascript,使用 google client 所以使用类似的东西(我在另一个例子中找到):

gapi.client.request({
    'path': '/upload/storage/' + API_VERSION + '/b/' + BUCKET + '/o',
    'method': 'POST',
    'params': {'uploadType': 'media'}
    'headers': {
        'Content-Type': 'multipart/mixed; boundary="' + boundary + '"'
     }

我需要API_VERSION吗?如何找出使用哪个path?我知道我的bucket 名字,但upload/storage/ 是从哪里来的?和/b/? (虽然https://cloud.google.com/storage/docs/json_api/v1/how-tos/upload 表明我需要它) 该示例使用了带有boundary 的标头,但我找不到任何关于它的信息,而且我可能也不需要它。问题是我找不到任何minimally 所需的标头。 我遇到了'x-goog-acl': 'public-read',这需要在标题中吗?

总结一下,我想回答的问题:

  • 我至少需要将哪些标头上传到 allUsers 访问权限设置为 Owner 的存储桶(我知道,这不是最好的主意,这将在未来发生变化)
  • 任何关于如何从html 表单获取文件并使用ajax 发送请求或使用gapi 的示例代码,我认为这是为了做到这一点。

我希望我的问题很清楚,我基本上不知道从哪里开始/找到正确的代码示例。虽然这可能与 google javascript 客户端 api 位于 beta..

【问题讨论】:

    标签: google-cloud-storage google-client google-api-js-client


    【解决方案1】:

    我最少需要将哪些标头上传到 allUsers 访问权限设置为 Owner 的存储桶(我知道,这不是最好的主意,这将在未来发生变化)。

    你是对的!这不是一个好主意。如果匿名用户拥有您的存储桶,这意味着他们可以删除其中的任何对象、覆盖现有对象,否则会造成代价高昂的恶作剧。尽管如此,您的问题的答案:

    <form action="https://storage.googleapis.com/YOUR_BUCKET_NAME" 
          method="post" enctype="multipart/form-data">
      <input name="key" type="text" value="objectName.txt" /><br/>
      <input name="file" type="file" /><br/>
      <input type="submit" value="Upload!" />
    </form>
    

    这是上传对象所需的绝对最小值。请注意,它不会将您重定向到任何地方或以其他方式指示成功。为此,您需要使用 success_action_redirect 参数,并要求绝对最小值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-10
      • 2019-06-09
      • 1970-01-01
      • 2018-06-16
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      相关资源
      最近更新 更多