Zend Framework как установить заголовки - PullRequest
30 голосов
/ 25 августа 2009

У меня вопрос, как мне сделать что-то вроде этого:

header("Content-Disposition: inline; filename=result.pdf"); 
header("Content-type: application/x-pdf"); 

С Zend Framework я попытался:

        $this->getResponse()
        ->setHeader('Content-Disposition:inline', ' filename=result.pdf')
        ->setHeader('Content-type', 'application/x-pdf');

Но не работает правильно.

С наилучшими пожеланиями,

Ответы [ 5 ]

54 голосов
/ 25 августа 2009

Ваше утверждение для установки заголовков ответа слегка искажено:

$this->getResponse()
     ->setHeader('Content-Disposition', 'inline; filename=result.pdf')
     ->setHeader('Content-type', 'application/x-pdf');

Выше должно работать - обратите внимание на разницу в Content-Disposition -заголовке.

Кстати ... Если вы хотите принудительно загрузить окно загрузки (вместо загрузки документа в браузер), вы должны использовать Content-Disposition attachment.

$this->getResponse()
     ->setHeader('Content-Disposition', 'attachment; filename=result.pdf')
     ->setHeader('Content-type', 'application/x-pdf');

В зависимости от браузера может также потребоваться установить Content-Length или изменить Content-type на комбинацию (несколько заголовков) одного или нескольких из application/force-download, application/octet-stream и / или application/download. И, как я написал в комментарии, иногда кэширующие заголовки могут мешать вашей загрузке. Проверьте, какие заголовки кэширования отправлены.

6 голосов
/ 25 августа 2009

Позднее к таблице я могу порекомендовать этот помощник действий в качестве простого, многократно используемого компонента для отправки файлов или данных в памяти в браузер.

Имеет параметры для кэширования, размещения и может использовать Apache Sendfile

2 голосов
/ 25 августа 2009

Я предполагаю, что вы делаете что-то вроде:

$this->getResponse()
        ->setHeader('Content-Disposition:inline', ' filename=result.pdf')
        ->setHeader('Content-type', 'application/x-pdf');
fpassthru($filename);
exit();

или что-то.

Ответ здесь никогда не будет обработан (который отображает заголовки). Ответ обычно выдается во время печати после действия.

Вы должны будете напрямую установить заголовки (как вы отметили в не-oo-коде) или напрямую использовать $this->getResponse()->sendHeaders().

0 голосов
/ 26 июля 2016

У меня был установлен заголовок. Это не было установлено, но ДОБАВЛЕНО. Итак, у меня был Content-Type text / html, а также application / pdf.

Пометка Content-Type с TRUE сделала возможной загрузку в IOS и других устройствах, которые показывали только загадочные символы после загрузки или ошибку:

->setHeader('Content-type', 'application/x-pdf', true);

setHeader($name, $value, $replace = false)

из: https://framework.zend.com/manual/1.12/de/zend.controller.response.html

0 голосов
/ 25 августа 2009

решаемые

        $this->getResponse()
         ->setHeader('Content-Disposition:inline', ';filename=result.pdf')
             ->setHeader('Content-Type', 'application/x-pdf');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...