我想實現的目標: 強制下載一個包含用戶選擇的pdf文件的zip文件。用winrar打開時,通過Cakephp MediaViews報告獲取Zip文件意外的存檔結束
我在做什麼控制器來實現這一點:
生成文件夾APP.WEBROOT_DIR.DS PDF報告 「package_files」(我用MPDF庫) *它產生正確讀取PDF。我在這裏調用$ this-> render();
用PHP的拉鍊功能,生成package.zip(從指定的文件夾上面包括PDF文件) *它生成正確的zip文件,從服務器下載時,它會打開Windows作爲有效的壓縮文件。
將控制器viewClass設置爲媒體並將參數設置爲強制下載爲zip文件, *在這裏我再次調用$ this-> render(); 期: 當我運行我得到的zip文件,但與winrar打開時,Zip文件獲取報告意外的存檔結束。
我沒有得到任何有用的物品通過這個問題來獲得...
什麼,我想呼籲兩次渲染正在文件損壞 感謝
我的控制器代碼:
/** before this code i generate pdf files and have no issue **/
/** now scan through the directory and add all the pdf files to a zip archive **/
$dir = new Folder("".APP.WEBROOT_DIR.DS."package_files");
$files = $dir->find('.*\.pdf');
$zip = new ZipArchive();
foreach ($files as $file) {
$file_path = $dir->pwd() . DS . $file;
$filename = $dir->pwd() . DS ."package.zip";
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
$zip->addFile($file_path,$file);
}
$zip->close();
/** now render the action to download the generated zip file **/
$this->viewClass = 'Media';
$params = array(
'id' => 'package.zip',
'name' => 'packaged_file',
'download' => true,
'extension' => 'zip',
'path' => APP . WEBROOT_DIR.DS.'package_files' . DS
);
$this->set($params);
$this->render();