私はFirefoxが.htmの「として画像を保存」しようとしてどのように修正すればよいですか?

StackOverflow https://stackoverflow.com/questions/381954

質問

我々は最近、我々は画像を取り扱う方法を変更するために私達を率いて私たちのサイトにアマゾン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はあなた、または他の誰、の ののオブジェクトを取得すると、

これらのヘッダ値で応答します
このバグは、Firefoxの(それが、少なくともそれはイメージです実現が、IEはまた、間違った型として保存しようとしている)に限定されるものではないので、

、私はS3のために間違ったMIMEタイプを返していることを推測すると思いますファイルます。

scroll top