2014-02-20 3 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 для отправки файлов.

Edit - Добавлен HTTP Headers

Глядя на заголовки, следующие вещи выскочить:

В заголовке ответа, длина содержание 0 и тип контента текст/HTML, когда я пытаясь отправить файл .doc, поэтому я думаю, что это должно быть приложение/msword.

В заголовке запроса принимаются текст/html, application/xhtml + xml, application/xml.

Вот заголовки:

Ответ:

HTTP/1.1 200 OK

Дата: Чт, 20 февраля 2014 16:32:26 GMT

Сервер: Apache/2,2 +0,15 (Red Hat)

X-Powered-By: PHP/5.3.3

Conten т-Length: 0

Подключение: закрыть

Content-Type: Текст/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

Принять: текст/html, application/xhtml + xml, application/xml; q = 0.9, /; q = 0,8

Accept-Language: EN-US, еп, д = 0,5

Accept-Encoding: GZIP, выкачать

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

Cookie: toolbarDisplay = скрыть; CakePHP = edh8riumsm2kb61ka4dih3v6c1

соединения: держать-жив

+0

У кого-нибудь есть идеи? Похоже, что он не отправляет правильный HTTP-заголовок. –

ответ

0

Я полагаю, что это ваш контроллер. Использование echo в контроллере прерывает шаблон MVC. В этом случае PHP отправляет HTTP-заголовки (тип контента text/html) в браузер, чтобы отобразить ваше сообщение «Загрузка ...».Эти заголовки можно отправлять только один раз. Браузер предполагает иметь дело с текстом, а не с файлом.

Удалите echo и убедитесь, что ваше представление отправляет соответствующие заголовки для вашего файла.

+0

См. Раздел Добавление заголовка –