2010-11-22 66 views
3

現在即時通訊在PHP發送(後來與替換的NodeJS)的標頭文件下載如下:Internet Explorer的內容處置的文件名不工作

<?php 
    // example array for .exe (for IE, doesnt work) 
    // i also tried x-msdownload 
    $file = array('octet-stream', 'download.exe'); 
    header('HTTP/1.0 200 OK'); 
    header('Content-Type: application/'.$file[0]); 
    // thats the part that doesnt work - i tried inline; attachment; with quotes, without quotes, single quotes, ending ; no ending ;... 
    header('Content-Disposition: filename="'.$file[1].'";'); 
    header('Content-Length: '.filesize($file[1])); 
    readfile($file[1]); 
    exit; 
    ?> 

結果總是一樣的 - 我重寫下載到這樣一個文件夾: /download/123/- 內容處置標題應回覆正確的文件名,但IE顯示爲文件名「123」和「未知文件類型」...現在,即使我改寫一切後該ID到文件夾index.php並請求例如:/download/123/something.exe它仍然會顯示爲下載「東西」和「未知文件類型」。無論我設定爲內容類型還是我如何訂購內容處置的價值。

據我所知,這是一個常見的IE問題,只是從來沒有得到解決 - 有沒有人知道這個問題的解決辦法?

謝謝!

編輯:只是爲了確保每個人都知道我想要的正確結果:IE應該得到它的.EXE文件並提供「運行 - 保存 - 取消」對話框而不是「未知文件類型」標準「查找 - 保存 - 取消「對話框。順便說一句。如果我點擊發現它重定向到微軟頁面,解釋我什麼x-msdownload(它現在設置爲內容類型)...

+0

fyi - 即時在OSX和目前IE7運行在交叉,但我確認與我的同事窗口誰也運行IE7和另一個誰運行IE8都有相同的結果。 – Tobias 2010-11-22 23:37:59

回答

2

Content-Disposition標頭不完整,它必須是:

header("Content-Disposition: inline; filename=xyz.exe"); 

文件名只是一個參數。如果您想強制另存爲對話框,也可以嘗試attachment

此外,MIME類型不應該是application/octet-stream。 IIRC通常定義爲application/x-msdos-program

相關問題