3

我正在使用 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属性中使用 URL,则 Safari 不会呈现任何内容(在所有其他浏览器中都可以),例如:

替代文字 http://lylo.co.uk/screenshot.png

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

4

2 回答 2

5

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

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

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

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

呸。

于 2009-02-24T12:06:57.077 回答
0

AWS 无法识别您的 URL:

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

它实际上应该是:

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

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

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

于 2009-02-24T00:39:07.993 回答