【问题标题】:Loading Amazon S3 images into Flex with temporary / signed URLs使用临时/签名 URL 将 Amazon S3 图像加载到 Flex
【发布时间】:2010-05-12 04:46:23
【问题描述】:

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

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

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

【问题讨论】:

  • 使用 HTTP 调试代理,如 charlesproxy.comfiddler2.com/fiddler2,查看浏览器加载文件与 Flex 请求文件时的区别。
  • Sam- 感谢您指出我的懒惰- 像我应该做的那样与 Charles 一起调试,果然 Flex Image 控件如何预处理 URL 存在问题...每个人都待命-我稍后会发布修复程序

标签: apache-flex image amazon-s3


【解决方案1】:

事实证明这是 Flex 的 mx.Image 控件中的一个问题:当您为其分配一个 url 作为源时,它会对 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 意味着它将失败一半,具体取决于生成的签名的字符 - 已经尝试过)

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 2018-12-27
    • 2016-07-06
    • 1970-01-01
    • 2020-04-27
    • 2020-10-02
    • 2020-02-02
    • 1970-01-01
    相关资源
    最近更新 更多