2014-02-20 91 views
0

我的網站從另一個網站下載文件,然後將該文件發送到客戶端,但它不發送它。CakePHP MediaView不工作

//Downloads file from veeva to server 
public function get_veeva($id = null) 
{ 
    $this->autoRender = false; 

    $asset = $this->Asset->findById($id); 
    $vault = $asset['VeevaVault']; 

    App::import('Vendor', 'phpVeeva', array('file' => 'veeva' . DS . 'veeva.php')); 
    $veeva = new phpVeeva(); 

    $file = $veeva->getVeevaAsset($vault['veeva_id'], $vault['title']); 
    $this->send_veeva($file); 
} 

//Sends downloaded file to client 
public function send_veeva($file) 
{ 
    $filename = $file['filename']; 
    $ext = $file['ext']; 
    $path = APP . 'tmp/'; 

    if (file_exists($path . $filename . '.' . $ext)) { 
     echo 'Downloading ' . $filename . '.' . $ext . '...'; 
       //echos /var/www/<sitename>/app/tmp/<filename>.<ext> 

     $this->viewClass = 'Media'; 
     $params = array(
      'id' => sprintf("%s.%s", $filename, $ext), 
      'name' => sprintf("%s.%s", $filename, $ext), 
      'download' => true, 
      'ext' => $ext, 
          'mimeType' => array(
            'doc' => 'application/msword', 
            'pdf' => 'application/pdf', 
            'ppt' => 'application/vnd.ms-powerpoint' 
           ), 
      'path' => APP . "tmp" . DS 
     ); 
     $this->set($params); 
    } 
    else { 
     echo $filename . '.' . $ext . ' does not exist at ' . $path; 
    } 
} 

該文件存在的地方,它應該和頁面回聲說它的下載,但沒有下載窗口彈出。我嘗試過和沒有mimeType,相同的結果。我的Cake版本不支持使用Cake響應來發送文件。

編輯 - 添加HTTP頭

望着頭,下面的事情蹦出:

在響應頭,內容長度爲0,內容類型是text/html的時候,我試圖發送.doc文件,所以我認爲它應該是應用程序/ msword。

在請求標頭中,接受以下內容:text/html,application/xhtml + xml,application/xml。

這裏是頭:

響應:

HTTP/1.1 200 OK

日期:週四,2014年2月20日16時32分26秒GMT

服務器:Apache/2.2 0.15(紅帽)

X-已啓動通過:PHP/5.3.3

Conten t-Length:0

Connection:close

Content-Type:text/html;字符集= UTF-8

請求:

GET /資產/ get_veeva/530566d7-80c4-4ad7-b815-20600a64cb32 HTTP/1.1

主機:guru-dev.selfip.com

User-Agent:Mozilla/5.0(Windows NT 6.1; WOW64; rv:27.0)Gecko/20100101 Firefox/27.0

Accept:text/html,application/xhtml + xml,application/xml; q = 0.9,/; q = 0.8

接受語言:EN-US,EN; Q = 0.5

接受編碼:gzip,放氣

的Referer:http://guru-dev.selfip.com/

曲奇:toolbarDisplay =隱藏; CakePHP的= edh8riumsm2kb61ka4dih3v6c1

連接:保持活躍

+0

有人有什麼想法嗎?它看起來沒有發送正確的http頭。 –

回答

0

我想這是你的控制器。在控制器中使用echo會破壞MVC模式。在這種情況下,PHP會向瀏覽器發送http頭(content type text/html)以顯示「正在下載...」消息。這些標題只能發送一次。瀏覽器假定處理文本,而不是處理文件。

刪除echo並確保您的視圖正在爲您的文件發送適當的標題。

+0

請參閱添加標題編輯 –