2014-09-30 64 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)将会消失