簡體   English   中英

如何修復Firefox試圖“將圖像另存為”.htm?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM