我试图从我的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分配?