3

イメージのホストに Amazon S3 を使用しています。S3 バケットはプライベートであるため、イメージをレンダリングできるように 5 分の有効期限を持つ一時 URL を ( Right AWSを使用して) 生成します。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 は解決されているように見えますが、画像は表示されません。同様に、Web ページのIMGタグのsrc属性でURL を使用しようとすると、Safari では何もレンダリングされません (他のすべてのブラウザーでは問題ありません)。

代替テキスト http://lylo.co.uk/screenshot.png

誰かが以前にこの動作を見たことがありますか?もしあれば、私が間違っている可能性があることを指摘できますか?

4

2 に答える 2

5

私が使用しているS3ライブラリを少し掘り下げてみると、ここで問題が見つかりました。

ファイルを S3 にアップロードするときは、Content-Typeヘッダーを設定する必要があります。私の状況では、2 つのファイルをアップロードしていました。1 つは Content-Type が の元の PDF ファイルで、もう 1 つはapplication/pdfPNG 形式のサムネイル プレビューでした。S3 にアップロードするために使用していたライブラリはヘッダーを設定しますが、元の PDF と PNG サムネイルの両方に対してContent-Typeヘッダーを設定していました。application/pdf

Firefox と IE は、Content-Typeヘッダーが間違っていても S3 からの PNG 画像を喜んでレンダリングするようですが、Safari はこれをまったく好まないため、画像をレンダリングしません。

そのため、使用している S3 ライブラリにパッチを適用しContent-Typeて、PNG サムネイルに正しいヘッダーが正しく設定されるようにすると、問題が解決しました。

ふぅ。

于 2009-02-24T12:06:57.077 に答える
0

あなたの URL は AWS によって認識されません:

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

実際には次のようになります。

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

Firefox、実際にリクエストを送信する前に、すべての URL エンコードされたエンティティ (「?」クエリ マーカーの前) を対応する ASCII 表現に置き換えます (つまり、Firefox は上記の例で置き換え%2Fます/) が、Safari はそうでない場合があります。このような状況では、AWS は HTTP 404 で Safari に応答する可能性があります。

URL が AWS に対して適切な形式であることを確認してください。画像が正常に取得された後に Firefox のアドレス バーに表示される URL と、画像の取得に失敗した後に Safari のアドレス バーに表示される URL の違いを注意深く調べてください。

于 2009-02-24T00:39:07.993 に答える