上传无法使用其他API POST进行谷歌云存储

时间:2016-10-21 09:15:38

标签: google-api google-cloud-storage

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

我阅读了这些文件,但这对于这个飞行的初学者来说没什么用,

任何人都可以一步一步地告诉我如何做到这一点?以及URL /标题/正文格式应该如何,如果还能给我一个非常有帮助的例子。

2 个答案:

答案 0 :(得分:0)

如果您不打算使用任何帮助程序库并且也是初学者,那么实现上传到GCS的最难的部分可能就是自己进行身份验证。我们暂时忽略它。

将对象上传到Google云端存储的最简单方法是对storage.googleapis.com进行HTTPS调用,如下所示:

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"使用内容"到#桶;你的桶名";这是一个测试文件。"

如果你的存储桶允许匿名用户上传文件(你不应该这样做),那么就不要包含授权行,你就完成了。

现在,由于您真的不想使用任何客户端库,并且可能包含Google的OAuth库,您需要自己实施授权,所以让我给您概述。

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

Google Cloud API使用OAuth来处理他们的请求,这是一种功能强大但不简单的身份验证机制。有关OAuth如何运作的大量文档:https://developers.google.com/identity/protocols/OAuth2

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

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

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

同样,客户端库完全为您完成整个过程。我正在描述独自实现所有内容的方法。

答案 1 :(得分:0)

您可以在此处找到相同的示例:

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

我已经说明了如何使用rest API将文件上传到Google云存储。

谢谢