Java 谷歌应用引擎:从谷歌云存储读取

Java 谷歌应用引擎:从谷歌云存储读取,java,apache-flex,google-app-engine,google-cloud-storage,Java,Apache Flex,Google App Engine,Google Cloud Storage,我在Google App Engine上有一个Flex/Java应用程序,我只想在Flex中使用URLRequest从Google云存储加载大型图像。我相信这很简单,但我不能让它工作。我将使用GoogleAPI控制台手动上传图像,因此我不需要从应用程序中编写任何内容。图像不能公开 我不是100%确定如何访问该文件,所以这可能是问题所在。我试过这些: “/gs/mybucket/myimage.jpg”:未找到 “/mybucket/myimage.jpg”:未找到 "http://common

我在Google App Engine上有一个Flex/Java应用程序,我只想在Flex中使用URLRequest从Google云存储加载大型图像。我相信这很简单,但我不能让它工作。我将使用GoogleAPI控制台手动上传图像,因此我不需要从应用程序中编写任何内容。图像不能公开

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

  • “/gs/mybucket/myimage.jpg”:未找到
  • “/mybucket/myimage.jpg”:未找到
  • "http://commondatastorage.googleapis.com/mybucket/myimage.jpg“:拒绝
我补充说myappid@appspot.gserviceaccount.com在Google API控制台的团队选项卡中,使用可以查看权限,我使用GSUtil获取并设置mybucket和myimage.jpg上的ACL,为myappid@appspot.gserviceaccount.com但那没用


我做错了什么?

我不确定flex是如何工作的,也不确定它是如何试图访问这些blob的

但是,如果您希望使用Google存储对象的内容响应http请求,则可以使用serve方法


您是否使用OAuth令牌授权URLRequest调用?如果不是,那么即使请求是从应用程序引擎应用程序启动的,它也会像未经验证的公共读取一样查看谷歌云存储。我不知道flex是否有跟踪选项,但如果有办法检查请求的详细信息,我会检查您是否设置了正确的身份验证


如果很难让flex与OAuth很好地配合使用,那么也可以使用签名URL(也称为查询字符串认证URL)。这使您能够创建带有特殊签名的URL,该签名隐式地传递您的授权,但只有具有该链接的人才能访问该对象。可以将对象的ACL设置为不允许公共访问,但您的签名URL将能够读取该对象。如果您愿意,您还可以对已签名的URL进行时间限制。关于如何使用这项技术。

你说“图像不能公开”-那么flex应用程序将如何访问它们?flex应用程序应该对它们具有读取权限,但到目前为止效果不是很好。谷歌云存储让你可以控制谁可以访问或不访问你的文件。在这种情况下,我只需要myappid@appspot.gserviceaccount.com但是没有其他人能够读取这些文件。这里有描述,我不知道我错过了什么:如果用户可以下载flex应用程序,flex应用程序应该能够下载图像,那么你的图片是公开的——这是无法回避的。Flex应用程序中有一个密码保护,如果应用程序不在服务器上,它就不起作用,所以我想这应该是安全的。我只是不希望这些图像可以通过他们的实际URL访问,也不希望这些图像在谷歌上被索引,等等。你正在将应用程序发送给用户——对于他们来说,确定要获取哪些图像以及如何获取,或者从flex应用程序中提取密码都是微不足道的。为什么要向用户显示图像,同时阻止他们自己下载图像?是的,Flex执行一个基本的HTTP请求。serve方法不是特定于BlobStore的吗?Google Cloud Storage为我提供了文件路径,但我不知道链接示例中的密钥?使用createGeBlobKey为Google Storage文件创建密钥。噢!这是我不知道的。第一次试一试,一切都很顺利!谢谢!