使用临时/签名URL将Amazon S3映像加载到Flex中

时间:2010-05-12 04:46:23

标签: flex image amazon-s3

我在S3上有一些安全图像需要加载到Flex中。我希望能够使用签名的临时URL执行此操作,但无法使其正常工作。我知道我生成的URL是正确的,因为它们在浏览器的地址栏中加载正常。此外,Flex在公开时使用非签名网址加载我的图片没有问题,但是一旦我尝试签署网址,所有图片都会失败,无论公开与否。

我尝试过image.source = signedURL,image.load(signedURL)等。如果我尝试使用URLLoader / URLStream加载文件,看起来我的数据还可以,但我不确定如何将这些结果转换为Image控件。

这只是Image控件无法识别签名网址的问题吗?我是否必须从字节数组加载图像?那会是什么样的?

1 个答案:

答案 0 :(得分:1)

这是Flex的mx.Image控件中的一个问题:当你为它分配一个url作为源时,它会在url上做一些内部解码/编码,如果你已经编码了它就会搞砸签名。

例如,我们创建一个这样的临时签名网址(取自as3awss3lib)

url = "http://" + AMAZON_ENDPOINT + "/" + escape(bucketName) + "/" + escape(objectName) + "?AWSAccessKeyId="+this.accessKey+"&Expires="+s+"&Signature="+encodeURIComponent(authString);

这个url会起作用,但是当它分配给Image.source时,底层的SWFLoader有一个名为OSToPlayerURI(url)的内部函数,它打破了签名。

(注意:创建临时网址而不编码authString意味着它会失败一半,具体取决于生成的签名字符 - 已经尝试过了)

有一个坚如磐石的(我认为)修复,那就是使用签名的url将图像加载到带有URLStream的字节数组,然后将ByteArray指定为mx.Image源。

我创建了一个封装此类的类:S3Image.as

希望这对某人有所帮助,据我所知,这是一个棘手的问题。