2010-11-23 119 views
1

我在用戶登錄的網站上顯示功能,然後顯示可供下載的文件列表。當他點擊該文件時,如果爲該文件類型安裝了一個文件類型(例如安裝了Acrobat Reader的文件類型),則應該顯示一個下載對話框,其中包含與該應用程序一起打開的選項,如果沒有,則提示下載。目前,我使用PHP構建列表,只是回顯每個文件的路徑。然後,當用戶點擊該鏈接時,瀏覽器直接請求該文件。我的第一個問題是,ppsx或pptx文件在瀏覽器中顯示爲純文本文件,導致屏幕上出現垃圾信息。然後我說在哪裏要服務的文件目錄中的.htaccess文件,與此內容:如何提供文件下載?試圖提供文件供用戶查看/下載,但服務器響應錯誤內容類型

Options All -Indexes 

Header set Content-Disposition attachment 

隨着該.htaccess文件,顯示瀏覽器對話框,但是,例如,在Firefox中,它具有選項「打開方式:記事本」,而不是正確的文件應用程序,或者如果沒有爲文件類型安裝應用程序,則選擇「無」。我可以看到響應頭Content-Type是「text/plain」,這是錯誤的,但是如何讓服務器檢測到正確的Content-Type?

非常感謝。

回答

0

您需要使用正確的MIME Content-Type才能從瀏覽器獲得適用於特定文件類型的相應響應。

簡報是:

application/vnd.ms-powerpoint 

可以修改你的.htaccess文件更新的MIME類型上this site,如圖所示。

+0

非常感謝您的回答。聽起來像它靠近這種方式,但事情是我不知道他們想上傳什麼文件類型。它可以是PPSX,PDF,DOCX,TXT,ZIP等。 – 2010-11-23 21:46:12

0

好吧,我放棄了它,並重新編寫它的工作原理。在我的看法中,我打印了一個控制器方法的路徑,並用文件ID傳遞一個參數給它。控制器檢查與會話的用戶ID,會在數據庫中的文件,然後有這樣的代碼:

if (file_exists($file['path'])) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.$file['name']); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file['path'])); 
    ob_clean(); 
    flush(); 
    readfile($file['path']); 
    exit; 
} 

它successfuly使瀏覽器彈出一個下載對話框還贈送與打開它的選項如果安裝了相關的應用程序。