2010-12-08 43 views
2

我寫了下面的PHP功能,但仍然得到提示要下載的文件:如何在瀏覽器中顯示以字節形式返回的圖像而不提示下載?

function navigateToBytes($contentType, $bytes){ 
    header('Content-Type: ' .$contentType); 
    //header('Content-Transfer-Encoding: binary'); // UPDATE: as pointed out this is not needed, though it does not solve the problem 
    header('Content-Length: '.strlen($bytes)); 
    ob_clean(); 
    flush(); 
    echo $bytes; 
} 

調用函數的例子:

navigateToBytes('image/jpeg', $bytes); // UPDATE: turns out this does work, using image/tiff for tiff images is when the browser does not display the image 

其中$字節是字節從讀文件。

回答

1

道歉所有 - 事實證明,我遇到了問題,因爲我使用JPEG瀏覽器將顯示圖像時,我正在測試的圖像是TIFF的(內容類型正確設置爲圖像/ TIFF)!

最終由瀏覽器決定是否可以顯示正在發送的內容類型。

爲了記錄我需要改變的唯一的標題是

Content-Type, 

我應該設置

Content-Length 

過,除非我設置

Transfer-Encoding: chunked 
0

這似乎是正確的行爲給我。瀏覽器是人類查看事物的視口。總的來說,人類不希望查看二進制數據。你認爲應該發生什麼?

隨機建議:如果有一個網站正在做你想做的事情,請使用curl來嗅探他們發送的標題。

curl -I http://example.com/path/to/binary/file/that/displays/in/browser 

然後在您自己的腳本中使用完全相同的標頭。

+0

問題是當你有動態內容 - 例如我不知道鏈接將獲取什麼 - 它可能是一個JPEG,TIFF或PDF - 我在運行時查看字節確定文件類型,然後將其返回到瀏覽器 - 一個PDF我希望客戶端下載發送「Content-Disposition:附件;文件名= file.pdf「頭強制下載,但與圖像,我寧願他們只是顯示 - 當然,二進制不顯示的圖像應該呈現,因爲它總是在瀏覽器 – markmnl 2010-12-08 07:00:20

+0

Im知道我可以看看標題從其他網站 - 但我找不到像嵌入圖像數據的網站 - 圖像始終在圖像標籤 – markmnl 2010-12-08 07:03:06

0

作爲一個開始,擺脫HTTP(Content-Transfer-Encoding)中不存在的東西。

然後獲取一個HTTP跟蹤工具,例如Firefox的Live HTTP頭插件,並將「您的」頭與接收到的工作圖像進行比較。

不確定,請在這裏發佈HTTP跟蹤。

相關問題