我应该设置一个简单的下载管理器,我不明白这段代码哪里不能工作:
protected function doDownload($filename){
//$this->_helper->layout()->disableLayout();
//$this->_helper->viewRenderer->setNoRender(true);
$dir = Zend_Registry::get('dir');
$file = $dir->assets.$filename;
if(file_exists($file)){
$response = $this->getResponse();
$response->setHeader('Content-Description','File Transfer', true);
$response->setHeader('Content-Type','application/octet-stream', true);
$response->setHeader('Content-Disposition','attachment; filename='.basename($file), true);
$response->setHeader('Content-Transfer-Encoding','binary', true);
$response->setHeader('Expires','0', true);
$response->setHeader('Cache-Control','must-revalidate, post-check=0, pre-check=0', true);
$response->setHeader('Pragma','public', true);
$response->setHeader('Content-Length: ' , filesize($file),true);
ob_clean();
flush();
readfile($file);
exit(0);
/*header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit(0);*/
}
}而使用注释代码时,脚本工作得很好。
发布于 2010-06-23 17:06:43
您基本上不会通过Zend框架执行任何输出(除了头文件)。尝试以下操作:
if (file_exists($file)) {
$this->getResponse()
->setHeader('Content-Description','File Transfer', true)
->setHeader('Content-Type','application/octet-stream', true)
->setHeader('Content-Disposition','attachment; filename='.basename($file), true)
->setHeader('Content-Transfer-Encoding','binary', true)
->setHeader('Expires','0', true)
->setHeader('Cache-Control','must-revalidate, post-check=0, pre-check=0', true)
->setHeader('Pragma','public', true)
->setHeader('Content-Length: ' , filesize($file),true);
$this->getResponse()->setBody(file_get_contents($file));
}顺便说一句,你将不得不再次注释掉你的前两行代码,并且不要使用exit(0),否则它将无法工作,因为实际的头和正文的发送将在动作后完成。
https://stackoverflow.com/questions/3099895
复制相似问题