大家。我有类似的东西堆栈:我必须使用Zend Framework提供下载文件功能...几个小时的谷歌搜索对我没有帮助... 所以这是我的控制器代码(注意:我是初学者):
//callback
public function sendFile()
{
readfile(APPLICATION_PATH . "/../public/pdf/10.pdf");
}
public function init()
{
$this->_helper->contextSwitch()
->addContext('file', array(
'headers' => array(
'Content-Type' => 'application/pdf',
'Content-disposition' => 'attachment; filename="10.pdf"'),
'callbacks' => array(
'init' => '_sendFile'
)
))
->addActionContext('download', 'file')
->setAutoJsonSerialization(false)
->initContext();
}
// ...
public function downloadAction()
{
}
PS:我发现这个download files with zend framework,但我想以Zend方式做到这一点。 谢谢大家
答案 0 :(得分:2)
你可以试试。
public function init()
{
$this->_helper->contextSwitch()
->addContext('file'))
->addActionContext('download', 'file')
->setAutoJsonSerialization(false)
->initContext();
}
// ...
public function downloadAction()
{
if ($this->_helper->contextSwitch()->getCurrentContext() == 'file') {
$this->getResponse()
->setHeader('Content-type', 'application/pdf; charset=binary')
->setHeader('Content-Disposition', 'attachment; filename="10.pdf"')
->setHeader('Content-length', filesize(APPLICATION_PATH . "/../public/pdf/10.pdf"))
->setHeader('Cache-control', 'private');
readfile(APPLICATION_PATH . "/../public/pdf/10.pdf");
$this->getResponse()->sendResponse();
} else {
throw new Zend_Controller_Action_Exception('File not found', 404);
}
}
例如,您还必须将参数格式设置为文件作为调用页面中的POST或GET变量。
<a href="http://yourdomain.com/path/to/controller/format/file">
如果您的文件位于公开文档文件夹中,您只需直接链接到该文件夹即可。
<a href="http://yourdomain.com/pdf/10.pdf">
并且不打扰上面的PHP / ZF代码。
我希望这会有所帮助。
亲切的问候
加里