图像的Amazon S3临时URL可在IE和Firefox中使用,但不能在Safari中使用

时间:2009-02-23 22:24:17

标签: safari amazon-s3 amazon-web-services right-aws

我正在使用Amazon S3来托管图片。 S3存储桶是私有的,因此我生成一个临时URL(使用Right AWS),到期时间为5分钟,以允许渲染图像。 URL如下所示(注意:下面的URL不起作用):

https://mybucket.s3.amazonaws.com:443/attachments%2F30%2Fsmall.png?Signature=J%2BXzQd95myCNv0Re8arMhuTFSvk%3D&Expires=1235511662&AWSAccessKeyId=1K3MW21E6T8LWBY94C01

这很好用,我可以将URL粘贴到Firefox中并显示图像。 IE也是如此。但是,当我在Safari中尝试时,URL似乎已解析,但不显示任何图像。同样,如果我尝试在网页上的 IMG 标记的 src 属性中使用该网址,则Safari不会呈现任何内容(在所有其他浏览器中都可以使用),例如:

alt text http://lylo.co.uk/screenshot.png

之前有没有人见过这种行为,你能否指出我可能做错了什么?

2 个答案:

答案 0 :(得分:5)

在我正在使用的S3库中进行了一些挖掘,我发现了这个问题。

将文件上传到S3时,您必须设置Content-Type标题。在我的情况下,我上传了两个文件,一个是内容类型为application/pdf的原始PDF文件,另一个是PNG格式的缩略图预览。我用来上传到S3的库确实设置了Content-Type标题,但它为原始PDF和PNG缩略图设置了标题application/pdf

似乎Firefox和IE很乐意从S3渲染PNG图像,即使它有错误的Content-Type标题,而Safari根本不喜欢这样,因此不会渲染图像。

因此,修补我正在使用的S3库,以便在PNG缩略图上正确设置正确的Content-Type标头解决了这个问题。

呼。

答案 1 :(得分:0)

AWS无法识别您的网址:

...attachments%2F30%2Fsmall.png...

实际上应该是:

...attachments/30/small.png...

Firefox 在实际提交请求之前将所有URL编码实体(在'?'查询标记之前)替换为相应的ASCII表示形式(即Firefox将%2F替换为/ {1}}在上面的示例中),而Safari可能不会。在这种情况下,AWS可能会使用HTTP 404回复Safari。

确保您的网址格式适合AWS。仔细研究在成功检索图像后Firefox在其地址栏中的URL与图像失败后Safari在其地址栏中的URL 之间的差异被检索。