私はFirefoxが.htmの「として画像を保存」しようとしてどのように修正すればよいですか?
-
23-08-2019 - |
質問
我々は最近、我々は画像を取り扱う方法を変更するために私達を率いて私たちのサイトにアマゾンS3を実装しました。私たちは、ディスクからファイルを読み、いくつかの統計を記録、ヘッダーを設定し、画像/ JPEGなどのファイルの内容を返すコントローラ/fotos.phpを呼び出すために使用します。
すべてはS3までOK行ってきました。 Fotos.phpは今、302はアマゾン内のリソースにリダイレクトず、すべてが素晴らしく、作業ですが、それが.htmのように、そのファイルの種類を設定しますので、あなたは、Firefoxで画像を保存することはできません。私が問題にこの議論を発見し、そしてそれは、Firefoxのバグのように思えるます:
https://bugs.launchpad.net/ubuntu /+source/firefox-3.0/+bug/207670する
ここで問題(大きな画像を保存しようとする)を示すURLがあります:
のhttp:// WWW .viajeros.com /写真集/ EL-グランラーゴドアティトラン-Y-SUS-ボルカネス/ 132968 の
のInternet Explorer 6は、少なくともUntitled.BMPとして保存しようとします。
ここでは、fotos.phpのコードのスニペット使用されます:
$archivo = $fotos->ObtenerPathFotoAmazon( $url, null ); if (empty($_GET['nocache'])) { header('HTTP/1.0 302 Found'); header("Expires: ".gmdate("D, d M Y H:i:s", time()+315360000)." GMT"); header("Cache-Control: max-age=315360000"); } else { header('HTTP/1.0 307 Temporary Redirect'); } header('Location: ' . AWS_BUCKET_URL . $archivo); die;
あなたは、このための回避策を知っていますか?
EDIT:我々としてもCloudFrontのを使用している
。解決
で画像のコンテンツタイプを指定しよう
header('Content-Type: image/jpeg');
か
header('Content-Type: image/png');
多分あなたは、PHPのコンテンツタイプを指定できるように、コンテンツ配置添付ファイルを使用する必要があります(場所は、Webサーバにタスクを残す)
$archivo = $fotos->ObtenerPathFotoAmazon( $url, null );
if (empty($_GET['nocache'])) {
header('HTTP/1.0 302 Found');
header("Expires: ".gmdate("D, d M Y H:i:s", time()+315360000)." GMT");
header("Cache-Control: max-age=315360000");
}
header('Content-Type: image/jpeg');
header("Content-Disposition: attachment; filename='$archivo'");
readfile(AWS_BUCKET_URL .$archivo);
die();
他のヒント
これはバグではありません。
S3自体は、あなたが保存オブジェクトがあるmimetypeを知りません。あなたが PUTをするときに必要S3でののオブジェクトは、コンテンツ・タイプとコンテンツ-処分のヘッダ(および任意の他、あなたがしたいこと)を含みます。あなたがそうすると、S3はあなた、または他の誰、の ののオブジェクトを取得すると、
これらのヘッダ値で応答します、私はS3のために間違ったMIMEタイプを返していることを推測すると思いますファイルます。
の人々は他のフォーラムでこれを頼むとき、私はこのスクリプトのnoreferrer">
私は自分自身に一度、この問題に遭遇しました。私は(当時)それのための唯一の本当の問題を回避するには、URLの末尾に「#1 .JPG」のようなものを追加することだったと思います。それはあなたの処理に影響を与えるべきではないとJPGにダウンロードタイプを設定するためにFFを強制されます。