2011-08-20 66 views
3

我在Amazon S3上託管圖像並在我的Flash應用程序中使用它們。我的應用程序會收到指向S3中圖像的已簽名S3網址。該URL看起來是這樣的(換行增加了清晰度):向Flash發送帶有+符號的URL的請求

http://s3.amazonaws.com/my-bucket/my-image.jpg? 
    AWSAccessKeyId=AKIAI7PSLIMJFIA2JRQG& 
    Expires=1313812683& 
    Signature=yhnSe47GRjReUQlfG/S/A+JJTdo= 

的這裏的問題是有可能發生在簽名的+跡象。如果我按原樣發送+標誌,那麼瀏覽器會認爲它是一個空格,因爲它應該根據URL規範。真的,S3不應該使用+標誌,但它似乎是something they overlooked

通常這不是問題,因爲您只需將+標誌替換爲%2B即可。但是,Flash有一些默認行爲會造成困難。

從我所看到的,URLRequest目標是建立以總是編碼的網址,如果它是通過encodeURI函數傳遞。我看不出有什麼辦法可以解決這個問題。不幸的是,encodeURI不會編碼+標誌,但它確實編碼%標誌。

這意味着如果我將+標誌留在那裏,那麼Flash會將其保留,S3認爲我的URL中有一個空格。如果我使用%2B,則由於編碼爲%,Flash會將其轉換爲%252B。衛生署!

有沒有人看到我失蹤的方法呢?

+0

我做的'navigateToURL'和'URLLoader'請求嘗試這樣做,既表現出就像你所需要的網址。你有更多的例子讓我們看看嗎? – Jacksonkr

回答

2

我不認爲它會自動更改提交給它的網址。 Adobe的文檔甚至會告訴你要小心並避開不尋常的字符。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLRequest.html?filter_flash=cs5&filter_flashplayer=10.2&filter_air=2.6

+0

我認爲你是對的。我發現有問題的代碼實際上是設置「Image」組件的「source」屬性,而不是使用「URLRequest」。我將通過使用'URLRequest'來查看是否有解決方法,然後將這些字節提供給'Image'。 – Kai

+0

已修復!原來只是強制url編碼的Image組件。使用'Loader'並將生成的位圖提供給'Image'可以正常工作。感謝您的洞察力。 – Kai