如何在php-yii框架中下载用户上传的文件?
我的网站上有用户列表,每个用户都可以上传每个部分的多个文件(工作信息、教育、证书等)
上传的文件将保存在上传文件中。这是链接
C:'wamp'www'project'themes'mydesign'assets'global'uploads
在上传foler中,还有许多其他文件夹,文件夹以用户id命名。
C:'wamp'www'project'themes'mydesign'assets'global'uploads'1'
C:'wamp'www'project'themes'mydesign'assets'global'uploads'2'
C:'wamp'www'project'themes'mydesign'assets'global'uploads'3'
1,2,3是user1、user2、user3的文件夹名称。1,2,3为user1、用户2、用户3的id
。
当用户第一次上传并保存任何文件时,该用户的文件夹将在上传文件夹中创建。
所有用户文件,每个部分都保存在其文件夹中。。现在,我想在CgridView中为每个用户的删除按钮附近添加一个下载按钮。。我想为我想要的任何用户下载zip中的所有文件。
有这样做的示例代码吗?我应该使用什么工具、扩展或库?或者有可用的代码吗?我是yii的新手,不知道如何获取每个用户的所有文件并下载到zip文件夹中。任何建议。
步骤1:您需要在网格中生成关联链接来调用Yii控制器->操作,比如actionZipDownload。为此,请遵循下面的链接:确保您也将userId传递给该操作。
http://www.yiiframework.com/wiki/593/yii-cgridview-add-custom-button/
步骤2:根据传递的userId执行该操作时,您需要根据设置(目录结构)确定目标关联用户目录路径。
步骤3:从该特定目录中读取所有文件,添加用于创建zip的文件,并将zip文件存储在临时目录中。zip名称可以是userId_date.zip
步骤2和3的来源可能如下,您需要对$destination的相对路径进行一些调整。还要检查php文档http://php.net/manual/en/class.ziparchive.php
<?php
public function actionZipDownload(){
$userId = $_GET['userId']; // get the passed user id
$zip=new Zip Archive();
$destination=dirname($_SERVER['DOCUMENT_ROOT'])."/project/themes/mydesign/assets/global/uploads/".$userId."/filename.zip";
if($zip->open($destination,ZIPARCHIVE::CREATE) !== true) {
return false;
}
$doclist=CUploadedFile::getInstancesByName('files');
foreach($doclist as $thefile)
{
$random=rand(11111,99999);
$filename=$random.$thefile;
$zip->addFile($thefile->tempname,$filename);
}
$zip->close();
}
?>
第4步:成功生成zip后,将响应发送到浏览器进行下载。
步骤5:下载成功后,您可能需要删除临时zip存档以节省空间。
从第2步到第5步,请点击此链接http://www.bsourcecode.com/yii-framework/yii-files/yii-zip-format/
希望有帮助。