我有一个问题,我该怎么做这样的事情:
header("Content-Disposition: inline; filename=result.pdf");
header("Content-type: application/x-pdf");
与Zend框架,我曾尝试:
$this->getResponse()
->setHeader('Content-Disposition:inline', ' filename=result.pdf')
->setHeader('Content-type', 'application/x-pdf');
但是,不能正常工作。
最好的祝福,
你的语句设置响应头略微畸形:
$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
。 正如我在评论中写道有时缓存头可以用你下载的干扰。 请检查该缓存,头被发送。
晚表,我可以推荐这个动作助手作为一个简单的,可重用的组件以供发送文件或内存中的数据到浏览器。
有缓存,配置选项,并可以利用Apache的SENDFILE
我的猜测是,你正在做的事情,如:
$this->getResponse()
->setHeader('Content-Disposition:inline', ' filename=result.pdf')
->setHeader('Content-type', 'application/x-pdf');
fpassthru($filename);
exit();
或者其他的东西。
这里的响应将永远不会被渲染(这使得头)。 该响应动作后打印过程中呈现,通常。
你将不得不直接设置的标头(如你在非面向对象的代码说明),或使用$this->getResponse()->sendHeaders()
直接。
我有一个报头组。 它没有设置,但他补充说。 因此,我不得不为text / html,并应用/ PDF格式的内容类型。
标记的内容类型与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
解决了
$this->getResponse()
->setHeader('Content-Disposition:inline', ';filename=result.pdf')
->setHeader('Content-Type', 'application/x-pdf');