2011-02-24 28 views
28

可能重複:
Is it safe to serve an image on the web without an extension?我可以在<img>中使用沒有擴展名的圖像嗎?

我想在頁面中使用類似<img src="advertisements/12" style="border: 1px solid">。 FireFox不會顯示它,這讓我覺得我必須爲文件有一個文件擴展名。我在這裏(對於其他瀏覽器),還是像MIME類型的FF?

編輯

我已經試過各種東西,它仍然是行不通的。我現在正確地在文件上添加了一個擴展名(例如,Flash的.swf)。我改變了目錄,等等等等。當我打電話給file_exists()時,文件就在那裏,所有的都很開心,但是我絕對無法讓它在頁面上呈現。它可以是img標記中的.PNG,也可以是Flash對象。兩者都不起作用。我做錯了什麼:-( 另外,如果我將非上傳文件重命名爲腳本正在查找的文件,那可以正常工作,但上傳的文件不會...

+2

不 「廣告/ 12」 發送正確的'內容type' HTTP標頭的圖像類型是?我不認爲瀏覽器關心擴展。 –

+0

是的,你可以。但是請記住,如果用戶決定將圖像保存在文件系統中,這會激怒用戶。 –

回答

25

是的,你應該可以。

瀏覽器最初不會查看文件名,它們查看HTTP服務器響應中Content-type標頭中列出的MIME類型。如果內容類型是image/jpeg,或者是png或者gif或者什麼的,那麼事情會很好,並且會很高興地呈現圖像。

如果沒有有效的MIME類型,某些瀏覽器會嘗試猜測類型是什麼。他們會查看請求對象的擴展名,或者他們會查看前幾個字節。如果失敗了,那麼你會得到一個redex。

這在Firefox/Firebird的早期階段會導致一些問題,因爲它嚴格遵守MIME類型,並且經常拒絕渲染沒有有效MIME類型的東西。 IE做了一個猜測,許多懶散的網絡服務器會提供可以在IE中渲染的頁面,但在其他頁面中則不會。但現在,事情好多了。

因此,只要您的web服務器在請求img對象時提供正確的MIME類型,您就可以輕鬆完成。如果您遇到問題,請檢查您的網絡服務器在「請求廣告/ 12」時所做的操作。

+2

302重定向如何適合此(如果img src重定向到圖像)? – jbyrd

2

提供MIME類型可能會有所幫助,儘管服務器理論上應該提供正確的服務器。如果它是一個專門用於提供映像的PHP(或類似的)腳本,則必須確保將HTTP Content-Type標頭設置爲適當的MIME類型。

如果你想避免使用<img>標籤,你可以與CSS背景連詞使用<div>,但是這不會幫助如果瀏覽器不承認advertisements/12任何已知的圖像類型。

+0

這只是存儲在磁盤上的映像。 MIME類型在我的文件瀏覽器上很好(Nautilus) – Bojangles

+1

檢查圖像實際被投放時顯示的MIME類型。 Apache和類似的軟件常常決定純粹基於擴展,如果它沒有,它會默認MIME類型爲別的。試着給圖片一個擴展名,看看它是否能讓你獲得任何地方。如果是這樣,那麼你必須找出一種方法來迫使apache將它識別爲任何類型的文件。 – digitlworld

9

服務器返回什麼?文件擴展名不用於任何事情,真的。瀏覽器正在檢查Content-type標題,該標題應該與image/jpeg或您正在提供的任何類型的圖片類似。

這經常用於動態提供圖像的網站,通常來自數據庫。我看到很多圖片網址,例如image.aspx?id=37,雖然它在技術上有一個「擴展」並不意味着它是一個圖像。這些都在HTTP標頭值中。

+0

對,我以前的回答是說,如果您提供的文件沒有可識別的擴展名,服務器本身不一定會正確設置該標題。它不會讀取文件並嘗試確定它是什麼。 – digitlworld

+0

@Digitlworld:對於普通文件,Web服務器會處理這類事情。對於像這樣的自定義內容,服務器需要配置爲知道提供標題,否則服務器上運行的應用程序需要手動完成。 (我通常更喜歡後者在我的設置。)當然,這個問題沒有指定任何有關其上運行的任何應用程序框架的服務器的信息... – David

+0

服務器運行與PHP5的Apache2。這些文件實際上只是標準圖像或Flash(.SWF)文件。他們只是沒有(沒有)延期。 – Bojangles

1

重新命名從Web窗體上傳的圖像後,發現自己的圖像查看問題類似。由於我可以混合使用gif,jpg,jpeg或png文件,所以我查看了文件屬性。

我最終做的是檢查MIME類型(通常在處理上傳文件時在$ _FILES數組中)並將相關擴展附加到文件名。

if($_FILES[$fieldname]['type'][$key]=='image/gif') { 
    $ext='.gif'; 
} 

if($_FILES[$fieldname]['type'][$key]=='image/jpeg') { 
    $ext='.jpg'; 
} 

if($_FILES[$fieldname]['type'][$key]=='image/pjpeg') { 
    $ext='.jpg'; 
} 

if($_FILES[$fieldname]['type'][$key]=='image/png') { 
    $ext='.png'; 
} 

List of common image mime types.

,可呈現沒有解決我的問題,我的瀏覽器試圖下載我的圖片爲二進制文件,而文件擴展名。

服務器 - Debian的,Apache 2.2的,PHP 5.3

Web客戶端 - Kubuntu的11.10,火狐

相關問題