我正在使用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
之前有没有人见过这种行为,你能否指出我可能做错了什么?
答案 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 之间的差异被检索。