2013-08-29 37 views
0

我最近將我的站點從CakePHP 1.1遷移到1.3。CakePHP 1.3媒體視圖不能正確下載ZIP文件

我現在使用媒體視圖下載文件,但是,我有一個主要問題。

當我通過媒體視圖下載一個zip文件並嘗試提取它時,windows聲稱該文件是空的。如果我試圖預覽它,它說它是無效的。

  • 的文件大小是正確的,大小相同的服務器
  • 我可以從服務器通過FTP下載完全相同的文件,它是正確的
  • 我可以通過媒體查看下載一個PDF文件,和它工作正常(但ZIP文件沒有)

這裏是我的控制器代碼:

 $this->view = 'Media'; 
    $downloadparams = array(
      'id' => 'junkstuff'.'.zip', 
      'name' => 'junk3', 
      'download' => true, 
      'extension' => 'zip', // must be lower case 
      'path' => APP . 'tmp/files' . DS // don't forget terminal 'DS' 
    ); 
    $this->set($downloadparams); 

再次,如果我陳ge轉換爲pdf文件,並將「extension」更改爲「pdf」,這一切都可以正常工作。 Debug設置爲0。
我的代碼的用法是直接從1.3 Cakebook:http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Views.html

滑稽的是,他們用拉鍊作爲cakebook一個例子....

什麼可能我是做錯了什麼?

作爲參考,這個線程似乎是完全一樣的問題,但它沒有答案之一: when opened with winrar, Zip file obtained through Cakephp MediaViews reports Unexpected end of archive

+0

順便提一下,tmp有一個常量:''path'=> TMP。 '文件'。 DS' – mark

+0

謝謝,我不知道那一個。文件路徑正在工作,但爲了簡單起見,我改變了它。拉鍊仍然不起作用。 – dwlorimer

+0

是的,這是無關的:)我從來沒有在1.3的zip文件的問題,但。我不知道什麼是錯的,特別是當其他(二進制)文件如PDF工作時。任何方式升級到2.x?然後,您可以刪除整個MediaView並使用乾淨的響應方法。 – mark

回答

0

事實證明,當我把網站直播到現場服務器(它在服務器上,但是我的「測試」服務器)時,這個問題就解決了。我唯一能想到的地方就是有一個引用官方網站名稱的引用或安全檢查。我的測試網站有不同的網站地址。

這是一個猜測。我真的不確定它自己修復了什麼。但我沒有更改代碼,並開始在現場進行工作。

0

你的內容類型可能是錯誤的(不使用效應初探類時發生 - 你不能這樣做在課程)的1.3:

Content-Type application/octet-stream 

應更好地被

Content-Type application/x-compressed 

而且內容長度可能是使用FUL。 您可以嘗試使用header()手動添加這些標頭。

+0

我試圖通過Mime類型選項手動設置應用程序。但是,無論我放在那裏,瀏覽器總是使用相同的類型。 – dwlorimer