Загрузка файлов с помощью Zend contextSwitch() Action Helper
Все. Я в стеке с похожей вещью: я должен предоставить возможность загрузки файла с Zend Framework... Несколько часов поиска в Google не помогают мне в этом... Так вот мой код контроллера (примечание: я новичок):
//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 Framework, но я хочу сделать это Zend способом. Спасибо вам всем
1 ответ
Вы могли бы попробовать.
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.
Надеюсь, это поможет.
С уважением
Garry