我有一个情况,我有用户数据列表,在那个数据细节中,我也存储了一个文件。 现在,当用户点击像DOWNLOAD这样的按钮时,我想下载zip文件中的所有用户文件。
我已经在控制器中编写了一个动作,我正在获取要下载的文件,但是我无法编写用于制作zip finle的代码并下载它。 下面是我在控制器中的代码。
public function actionMain($jid)
{
$values = UserRequest::find()->where(['sender_code'=>$jid,'status'=>1])->all();
$i=1; foreach($values as $data) {
$users = Users::find()->where(['access_code'=>$data->reciever_code])->one();
$file_names[]= $users->attach_cv;
}
}
这很好用。在$ file_name中获取所有文件,但我想在zip文件夹中下载这些文件。
请帮我解决这个问题
提供的链接在核心php中,并且很容易实现。但是如何在框架中做同样的事情。因为我有行动的文件名数组。如上所示。我是否需要在相同的操作或任何其他操作中编写用于生成.ZIP的代码。
答案 0 :(得分:0)
我建议您使用ZipArchive评论中指定的SiZE。 这样,您可以在开始下载之前启动压缩过程。
文件创建:
/**
* Generate zip file for upload
*
* @throws Exception
*/
private function createZip($files)
{
$file = 'full_path_to_file/your_file_name.zip';
$zip = new ZipArchive();
if ($zip->open($file, ZipArchive::CREATE) !== TRUE) {
throw new \Exception('Cannot create a zip file');
}
foreach($files as $file){
$zip->addFile($file[file_name], $file[local_name]);
}
$zip->close();
}
然后您可以在行动中返回要下载的zip文件路径