Подтвердить что ты не робот

Zend Framework, как настроить заголовки

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

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');

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

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

4b9b3361

Ответ 1

Ваше выражение о настройке заголовков ответов слегка искажено:

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

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

Кстати... Когда вы хотите принудительно загрузить окно загрузки (вместо загрузки документа в браузере), вы должны использовать 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. И, как я писал в комментарии, иногда кеширование заголовков может помешать вашей загрузке. Проверьте, какие отправители кэширования отправлены.

Ответ 2

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

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

Ответ 3

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

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

или что-то в этом роде.

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

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

Ответ 4

У меня был набор заголовков. Он не был установлен, но ДОБАВЛЕН. Поэтому у меня был Content-Type текста /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

Ответ 5

решаемые

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