[英]How do I fix Firefox trying to “Save image as” .htm?
我們最近在我們的網站上實施了Amazon S3,這使我們改變了處理圖像的方式。 我們曾經調用一個控制器/fotos.php,它將從磁盤讀取文件,記錄一些統計信息,設置標題並將文件內容作為image / jpeg返回。
一切順利,直到S3。 Fotos.php現在執行302重定向到亞馬遜的資源,一切都很好,但是你無法在Firefox中保存圖像,因為它將文件類型設置為.htm。 我發現了這個問題,這似乎是Firefox中的一個錯誤:
https://bugs.launchpad.net/ubuntu/+source/firefox-3.0/+bug/207670
這是一個顯示問題的URL(嘗試保存大圖像):
http://www.viajeros.com/fotos/el-gran-lago-de-atitlan-y-sus-volcanes/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;
你知道一個解決方法嗎?
編輯:我們也在使用CloudFront。
這不是一個錯誤
S3本身不知道你存儲的對象是什么mimetype。 當您在S3 把對象則還需要包括Content-Type和內容處置標題(和其他任何你可能想)。 執行此操作時,當您或其他任何人獲取對象時,S3將使用這些標頭值進行響應
嘗試使用header('Content-Type: image/jpeg');
指定圖像的內容類型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();
由於這個bug並不局限於Firefox(IE也試圖將其保存為錯誤類型,盡管它至少意識到它是一個圖像),我猜測S3正在為文件返回錯誤的mime類型。
當人們在其他論壇上提出這個問題時,我會指出他們在這個腳本的方向。 你不必全部使用它,但它是一個很好的指針在正確的方向。
我不會寫更多,因為其他人已經足夠好地回答了這個問題。
我曾經遇到過這個問題。 我認為它的唯一真正的解決方法(當時)是在URL的末尾附加類似“#.jpg”的內容。 這不應該影響您的處理,並將強制FF將下載類型設置為jpg。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.