2012-05-14 187 views
0

我在Google App Engine上有一個Flex/Java應用程序,我只需要在Flex中使用URLRequest從Google雲端存儲中加載大型圖像。我確信這很簡單,但我無法實現它的工作。我將使用Google API控制檯手動上傳圖片,因此我不需要從應用程序寫入任何內容。圖像不能公開。Google App Engine:從Google雲端存儲讀取

我不是100%確定如何訪問該文件,所以這可能是問題所在。我想這些:

  • 「/gs/mybucket/myimage.jpg」沒有找到
  • 「/mybucket/myimage.jpg」沒有找到
  • 「 http://commondatastorage.googleapis.com/mybucket/myimage.jpg「denied

我在谷歌API控制檯組選項卡與添加[email protected]可以查看權限,我用GSUtil的獲取和兩個mybucketmyimage.jpg添加一個設置ACL 閱讀許可[email protected]但這並沒有幫助。

我在做什麼錯?

+0

你說「圖像不能公開」 - 那麼Flex應用程序將如何訪問它們呢? –

+0

Flex應用程序應該具有** READ **權限,但目前效果不佳。 Google雲端存儲可讓您控制誰可以訪問或不訪問您的文件。在這種情況下,我只需要[email protected]_,但沒有其他人能夠讀取這些文件。這裏有描述,我只是沒有看到我錯過了什麼:[https://developers.google.com/storage/docs/accesscontrol](https://developers.google。com/storage/docs/accesscontrol) – user1394563

+0

如果用戶可以下載flex應用程序,並且flex應用程序應該能夠下載圖像,那麼您的圖像是公開的 - 這是沒有得到解決的。 –

回答

0

我不太確定flex是如何工作的或者它是如何嘗試訪問blob的。

但是,如果您想要使用Google Storage對象的內容響應一個http請求,那麼您可以使用serve方法。

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

+0

是的,Flex做了一個基本的HTTP請求。不是BlobStore專用的服務方法嗎? Google雲端存儲爲我提供了文件的路徑,但我不知道鏈接示例中的密鑰? – user1394563

+0

使用createGeBlobKey爲Google存儲文件創建密鑰。 https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/blobstore/BlobstoreService#createGsBlobKey(java.lang.String) –

+0

Oooh!這是我不知道的。第一次嘗試時,一切都像魅力一樣!非常感謝! – user1394563

0

你授權使用OAuth憑證爲URLRequest電話嗎?如果不是,那麼即使請求是從應用引擎應用發起的,它也會將Google雲端存儲看作未經身份驗證的公開閱讀。我不知道flex是否有跟蹤選項,但是如果有方法檢查請求詳細信息,我會檢查是否正在設置正確的身份驗證。

如果事實證明,要讓flex可以很好地與OAuth一起使用,您還可以使用簽名的URL(也稱爲查詢字符串驗證的URL)。這使您可以創建帶有特殊簽名的URL,該簽名隱式傳達您的授權,但只有具有該鏈接的人才能訪問該對象。可以將對象的ACL設置爲禁止公開訪問,但簽名的URL將能夠讀取該對象。如果你喜歡,你也可以限制一個簽名的URL。 Here's the documentation關於如何使用這種技術。

相關問題