2017-05-26 74 views
0

我目前使用gsutil cp从我的存储桶下载文件,但这需要您安装一堆东西。从api下载谷歌云存储文件

我只是想使用像一个简单的API请求下载:

http://storage.googleapis.com/mybucket/pulltest/pulltest.csv 

这让我访问被拒绝。 auth参数如何格式化以绕过此?

回答

0

想出如何做我想要的东西:

from google.cloud.storage.client import Client 
from google.cloud.storage.bucket import Bucket 
from google.cloud.storage.blob import Blob 
from google.oauth2.service_account import Credentials 

credentials = Credentials.from_service_account_file('key.json') 
client = Client(project='project', credentials=credentials) 
bucket = Bucket(client=client, name='bucket') 
blob = Blob(name='pulltest/pulltest.csv', bucket=bucket) 

print blob.exists() 
2

如果您的对象可以由匿名用户下载,您可以下载完全一样的对象。

尽管手工操作OAuth非常棘手。您需要向Google展示的东西是访问令牌。 auth头文件如下所示:

# This has gotta be in an HTTPS request. No sending credentials over HTTP, please. 
Authorization: Bearer something.abcdabcdabcdabcdabcdabcdabcdabcd 

获取访问令牌需要进行OAuth交换,这有点棘手。有一个在线的操场,将照顾它给你:https://developers.google.com/oauthplayground/

还有一堆的具体细节文档的,虽然你可能不会想要做手工:https://developers.google.com/identity/protocols/OAuth2

访问令牌只有好几分钟。他们不是要坚持。如果你打算做很多事情,你可能需要安装gcloud SDK,它有一个非常有用的“print-access-token”命令。

+0

是有办法gcloud身份验证登录,而无需使用终端?即通过蟒蛇,因为我想部署我的脚本使用亚马逊lambda –

+0

当然。您想创建一个代表您的应用的服务帐户。部署您的脚本以及该服务帐户的私钥并将其用于身份验证。 –