Flash / Flex跨域问题 - 使用BitmapData.draw()从AWS S3获取图像会导致SecurityError:错误#2122:安全沙箱违规

时间:2012-02-09 20:09:09

标签: flash flex amazon-s3 cross-domain bitmapdata

我在DisplayObject上使用BitmapData.draw(),其中包含来自我的AWS S3存储桶的图像。当我将S3图像URL设置为Image对象的源时,图像在swf中加载得很好但是当我在它上面使用BitmapData.draw()时,它给了我这个错误:

  

SecurityError:错误#2122:安全沙箱违规:   BitmapData.draw:https://www.example.com/Example.swf无法访问   https://s3.amazonaws.com/example-images/example.jpg。策略文件是   必需,但此媒体时未设置checkPolicyFile标志   加载。

AS代码:

var bmpd:BitmapData = new BitmapData(objectToDraw.width,objectToDraw.height);
bmpd.draw(objectToDraw);

我已尝试将以下crossdomain.xml文件放入我的S3存储桶根目录中无效:

<?xml version="1.0"?><!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>

1 个答案:

答案 0 :(得分:3)

有两种方法可以访问S3上的文件:

  • s3.amazonaws.com/[bucket name]/file.ext
  • [bucket name].s3.amazonaws.com/file.ext

由于crossdomain.xml文件需要位于域的根文件夹中,并且您无法访问s3.amazonaws.com的根文件夹,因此无法控制crossdomain.xml文件如果你使用第一种方法

如果您使用的是第二种方法,则可以将crossdomain.xml文件放在存储桶的根文件夹中,Flash Player将正确使用该文件。