apache-flex Flash/Flex跨域问题-对来自AWS S3的图像使用BitmapData.draw()会导致安全错误:错误#2122:安全沙箱违规

6uxekuva  于 2022-11-01  发布在  Apache
关注(0)|答案(1)|浏览(146)

我在一个DisplayObject上使用了BitmapData.draw(),该对象包含了我的AWS S3存储桶中的一个图像。当我将S3图像URL设置为Image对象的源时,图像在swf中加载正常,但当我在其上使用BitmapData.draw()时,它给了我这个错误:
安全性错误:错误#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 bucket根目录中,但没有效果:

<?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>
7kqas0il

7kqas0il1#

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

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

由于crossdomain.xml文件需要位于域的根文件夹中,而您无权访问s3.amazonaws.com的根文件夹,因此,如果使用第一种方法,则无法控制crossdomain.xml文件
如果您使用第二种方法,则可以将crossdomain.xml文件放在存储桶的根文件夹中,Flash Player将正确使用该文件。

相关问题