我有一个问题,我该怎么做:
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');
但是效果不正确。
最诚挚的问候,
答案 0 :(得分:54)
您设置响应标头的声明略有不正确之处:
$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
中的一个或多个的组合(多个标题),{ {1}}和/或application/octet-stream
。正如我在评论中写的,有时缓存标题可能会干扰您的下载。检查发送的缓存标头。
答案 1 :(得分:6)
在表格后面,我可以推荐this action helper作为一个简单的,可重复使用的组件,用于将文件或内存数据发送到浏览器。
具有缓存,处置和可以使用Apache Sendfile的选项
答案 2 :(得分:2)
我的猜测是你正在做的事情:
$this->getResponse()
->setHeader('Content-Disposition:inline', ' filename=result.pdf')
->setHeader('Content-type', 'application/x-pdf');
fpassthru($filename);
exit();
或其他什么。
此处的响应将永远不会呈现(呈现标题)。通常,在动作后打印期间会呈现响应。
您必须直接设置标头(正如您在非oo代码中所述),或直接使用$this->getResponse()->sendHeaders()
。
答案 3 :(得分:0)
我有一个标题集。 它没有设置,但是添加了。 所以我有一个Content-Type of text / html和application / 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
答案 4 :(得分:-5)
解决
$this->getResponse()
->setHeader('Content-Disposition:inline', ';filename=result.pdf')
->setHeader('Content-Type', 'application/x-pdf');