1

大家。我有类似的事情:我必须使用 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:我用zend框架找到了这个下载文件,但我想用这种Zend方式。谢谢你们

4

1 回答 1

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 代码。

我希望这有帮助。

亲切的问候

加里

于 2011-05-30T07:48:28.620 回答