Google App Engine:从Google云端存储中读取

时间:2012-05-14 20:57:30

标签: java flex google-app-engine google-cloud-storage

我在Google App Engine上有一个Flex / Java应用程序,我想要的是使用Flex中的URLRequest从Google Cloud Storage加载大图像。我确信这很简单,但我无法让它发挥作用。我将使用Google API控制台手动上传图片,因此我不需要从应用程序中编写任何内容。图像不能公开。

我不是100%确定如何访问该文件,因此这可能是问题所在。我试过这些:

  • " /gs/mybucket/myimage.jpg" 未找到
  • " /mybucket/myimage.jpg" 未找到
  • " http://commondatastorage.googleapis.com/mybucket/myimage.jpg" 被拒绝

我在Google API控制台的“群组”标签中添加了 myappid@appspot.gserviceaccount.com 可以查看权限,我使用GSUtil来获取和设置两者的ACL < em> mybucket 和 myimage.jpg myappid@appspot.gserviceaccount.com 添加 READ 权限但是没有#39 ; t帮助。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我不确定flex是如何工作的,或者它是如何尝试访问blob的。

但是,如果您想使用Google Storage对象的内容回复http请求,则可以使用serve方法。

https://developers.google.com/appengine/docs/java/blobstore/overview#Serving_a_Blob

答案 1 :(得分:0)

您是否使用OAuth令牌授权URLRequest调用?如果没有,那么即使请求是从应用引擎应用启动的,它也会将Google云端存储视为未经身份验证的公开阅读。我不知道flex是否有跟踪选项,但如果有办法检查请求详细信息,我会检查您是否正在设置正确的身份验证。

如果变得太难以灵活地与OAuth一起玩,你也可以使用签名的URL(a.k.a。查询字符串验证的URL)。这使您能够创建具有特殊签名的URL,该签名隐式传达您的授权,但只有具有该链接的人才能访问该对象。可以将对象的ACL设置为禁止公共访问,但您的签名URL将能够读取该对象。如果您愿意,还可以对签名的URL进行时间限制。 Here's the documentation关于如何使用这种技术。