0

我正在寻找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表明我需要它)该示例使用带有 a 的标头,boundary但我找不到任何相关信息,我可能也不需要那个。问题是我找不到任何minimally必需的标题。我遇到了'x-goog-acl': 'public-read',这需要在标题中吗?

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

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

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

4

1 回答 1

3

我至少需要将哪些标头上传到 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 参数,并要求绝对最小值。

于 2016-02-25T01:24:30.690 回答