我在Amazon S3上托管图片并在我的Flash应用程序中使用它们。我的应用程序接收签名的S3 URL,指向S3中的图像。 URL看起来像这样(为了清晰起见,添加了换行符):
http://s3.amazonaws.com/my-bucket/my-image.jpg?
AWSAccessKeyId=AKIAI7PSLIMJFIA2JRQG&
Expires=1313812683&
Signature=yhnSe47GRjReUQlfG/S/A+JJTdo=
此处的问题是签名中可能出现的+
符号。如果我按原样发送+
符号,那么浏览器认为它是一个空格,因为它应该根据URL规范。实际上,S3出于这个原因不应该使用+
符号,但它似乎是something they overlooked。
通常这不是问题,因为您只需将+
符号替换为%2B
。但是,Flash有一些默认行为,这使得这很困难。
从我所看到的情况来看,URLRequest
对象设置为始终编码URL,就好像它是通过encodeURI
函数传递的一样。我没有办法解决这个问题。遗憾的是,encodeURI
不对+
个符号进行编码,但 编码%
个符号。
这意味着如果我将+
符号留在那里,那么Flash会将其留下,而S3认为我的网址中有空格。如果我使用%2B
,则由于对%252B
进行编码,Flash会将其转换为%
。卫生署!
有人看到我想念的方法吗?
答案 0 :(得分:2)
我认为它不会自动更改提交给它的网址。 Adobe的文档甚至告诉您要小心并逃避不寻常的角色。