2014-09-30 48 views
2

我試圖從我的cloudfront發佈加載圖像。我的加載代碼的樣子:安全錯誤#2122從亞馬遜Cloudfront加載圖像

var thumbLoader:Loader = new Loader(); 

// add event listener to the thumbLoader 
thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (event:Event):void { 

    if (_thumbnail.bitmapData) _thumbnail.bitmapData.dispose(); 

    _thumbnail.bitmapData = (thumbLoader.content as Bitmap).bitmapData; 

    _thumbnail.width = stage.stageWidth; 
    _thumbnail.height = stage.stageHeight; 

    thumbLoader.unload(); 
}); 


thumbLoader.load(new URLRequest(src)); // src = https://xxxxxxxxxxxxx.cloudfront.net/big_icon.png 

我曾嘗試添加一個「的LoaderContext」作爲第二個參數去了「.load」的電話,但當時我只是得到一個錯誤#2123彈出,而不是錯誤#2122。我也嘗試添加一個crossdomain.xml到我的swf託管的服務器的根目錄,但是它什麼都沒做(我仍然對這個問題感到困惑,如果crossdomain.xml去了cloudfront?不是我的swf服務器嗎?cloudfront已經擁有這個?)。

UPDATE:

我想出了我的當前項目工作的解決方案,但我真的不認爲一個完整的答案的問題。仍然很想知道如何設置cloudfront和as3,以便可以從那裏加載位圖。

當我通過訪問thumbLoader.content直接訪問Bitmap數據時會引發錯誤。您仍然可以明顯地顯示位圖沒有安全性錯誤,如果你不訪問.content財產,所以我只是附加直接加載到舞臺,而不是位圖數據從裝載機轉移到Bitmap實例:

stage.addChild(_thumbnail); // _thumbnail is now a Loader instance, not Bitmap 

_thumbnail.contentLoaderInfo.addEventListener(Event.COMPLETE, function (event:Event):void { 

    _thumbnail.width = stage.stageWidth; 
    _thumbnail.height = stage.stageHeight; 

}); 

_thumbnail.load(new URLRequest(src)); 

更新2:

我發現我甚至不能直接加載https://xxxxxxxxxxxx.cloudfront.net/crossdomain.xml。我得到一個流錯誤,這似乎表明該文件不存在。在這個主題上,cloudfront文檔非常稀少,他說對於rtmp發行版有一個默認的crossdomain.xml,它不能被編輯,並且根本沒有提到web發行版的crossdomain.xml。如何將此文件添加或編輯到Web分配?

回答

0

Gahhh,答案非常簡單,只需將crossdomain.xml上傳到我的cloudfront發行版指向的s3存儲桶的根目錄即可。我很明顯是aws n00b。所以,在您的CloudFront的發行起源標籤指向,去到該域並上傳crossdomain.xml文件包含類似以下內容:

<?xml version="1.0" encoding="utf-8" ?> 
<!DOCTYPE cross-domain-policy SYSTEM 
    "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
    <site-control permitted-cross-domain-policies="master-only" /> 
    <allow-access-from domain="*" /> 
</cross-domain-policy> 

您還需要與第一構造函數參數提供一個LoaderContext設置爲true作爲第二個參數到您的通話Loader.load方法,像這樣:

loader.load(new URLRequest(src), new LoaderContext(true)); 

這將告訴AS3去找你剛剛裝了那個的crossdomain.xml和第一安全錯誤讓你(#2122) 。如果您的crossdomain.xml位於正確的位置(root)並且提供了正確的權限(我只允許所有域以'*'訪問),第二個錯誤(#2123)將會消失