使用rest API POST上传谷歌云存储失败



我想弄清楚如何使用rest API将文件上传到谷歌云存储,我不想使用客户端库。

我读了文档,但它对初学者没有帮助,

谁能给我一步一步怎么做?以及如何URL/header/body格式应该看起来像,如果也能给我一个例子,这将是非常有帮助的。

如果您不打算使用任何帮助库,并且还是初学者,那么实现上载到GCS的最困难的部分可能是对自己进行身份验证。

上传对象到Google Cloud Storage最简单的方法是通过HTTPS调用storage.googleapis.com,如下所示:

PUT /your-bucket-name/your-object.txt HTTP/1.1
Authorization:  (YOUR ACCESS TOKEN GOES HERE)
Content-Length: 20
Content-Type: text/plain-or-whatever; charset=utf-8
Host: storage.googleapis.com
User-Agent: YourApplication/1.0
This is a test file

将上传一个名为"your-object.txt"的文件,类型为"text/plain-or-whatever"到bucket"your-bucket-name",内容为"这是一个测试文件"。

如果您的bucket允许匿名用户上传文件(您不应该这样做),那么只需不包含授权行,您就完成了。

现在,由于您确实不想使用任何客户端库,并且可能包括Google的OAuth库,因此您将需要自己实现授权,因此让我给您一个概述。

首先,如果您想立即尝试一下,请安装"gcloud"工具,使用"gcloud auth login"登录,并使用gcloud auth print-access-token打印访问令牌。然后使用授权头Authorization: Bearer whatever.gcloudprintedout。这样你就可以快速运行GCS了。但是这个令牌只能持续一个小时左右,所以你需要真正实现OAuth。

Google Cloud api使用OAuth来处理请求,这是一种功能强大但并不简单的验证机制。关于OAuth如何与Google一起工作有大量的文档:https://developers.google.com/identity/protocols/OAuth2

还有更多关于授权Google Cloud请求的一般信息:https://cloud.google.com/docs/authentication

如果您在Google Cloud技术(如App Engine或GCE)上运行应用程序,那么验证将会更容易一些,但我将假设您在自己的机器上运行该应用程序。我将进一步假设您希望您的应用程序有自己的标识,而不是简单地让您作为上传流程的一部分登录。对于这种情况,您将需要一个服务帐户,该帐户将具有关联的私钥。

服务帐户的基本流程是创建访问凭据的JWT请求,然后用私钥对该请求进行加密签名,然后将签名后的请求发送给Google。它将返回一个令牌,稍后可能会将该令牌传递给实际的上传请求。您可以继续使用该令牌,直到它过期,此时您将需要构建另一个JWT请求来请求另一个令牌。

同样,客户端库完全为您处理整个过程。我所描述的是一种完全由你自己实现的方法。

您可以在这里找到相同的示例:

https://stackoverflow.com/a/53955058/4345389

我已经解释了如何使用rest API将文件上传到google云存储。

谢谢

相关内容

  • 没有找到相关文章

最新更新