使用acl下载Google存储文件并重定向

时间:2017-07-05 11:51:58

标签: google-app-engine redirect google-cloud-storage acl restful-architecture

用户可以从我的Google App Enigne应用程序下载csv文件。 较大的文件达到了1分钟的超时窗口,我重新映像了我的解决方案,为用户提供了存储ACL中的读访问权限,并重定向到了下载链接。

这是一个为用户提供访问权限并重定向到“https://storage.cloud.google.com/[bucket]/[object]”的工作示例(1)

storage_client = storage.Client()
bucket = storage_client.get_bucket(app_identity.get_default_gcs_bucket_name())
acl = bucket.acl
acl.user(ndb_user.primaryEmail).grant_read()
acl.save()

self.redirect("https://storage.cloud.google.com" + filename)

似乎我的解决方案不能以编程方式工作,也不能在浏览器中工作。 任何想法为什么或建议替代方法实际这样做?

1:https://cloud.google.com/storage/docs/xml-api/reference-uris

1 个答案:

答案 0 :(得分:0)

这不起作用,因为您只通过ACL api授予存储桶的READ访问权限。这映射到IAM角色roles/storage.legacyBucketReader,该角色不授予storage.objects.get权限(仅grants storage.buckets.getstorage.objects.list)。如果您切换到new IAM api,而是授予roles/storage.objectViewer这应该有效。

话虽如此,我强烈建议改为Signed URLs。签名URL将通过委派授予临时访问权限,而不是通过ACL永久授予用户访问权限,并且仅针对此用例进行访问。 Google的google-cloud库有一个“generate_signed_url”函数,您可以使用它来生成它们,而不是自己滚动它们。这是documentation