问题:
上传并解压文件名为 id_date.zip 文件,如下:
文件需要解压并分别存储到对应的id和日期下,目录格式为assets/file/id/date ,效果如下
解决方案:
因为CI 自带的Library没有upload这个功能,首先要借用大佬的upload.php,文件下载地址:
https://github.com/philsturgeon/codeigniter-unzip
将Unzip.php 保存到我们的system/libraries 目录下
并修改此文件的一小行:
class Upload {} 改成 class CI_Upload {}
controller中:
public function upload_zip()
{
$config['upload_path'] = './assets/temp';
$config['allowed_types'] = 'zip';
$this ->load ->library('upload',$config);
//判断是否上传成功
if(!$this->upload ->do_upload()){
$error = array('error' => $this ->upload -> display_errors());
print_r($error);
}else{
//先把zip文件上传到 './assets/temp'目录下
$data = array('upload_data' => $this -> upload ->data());
$this->load->library('unzip');
//获取到filename 是2_20190719
$filename=$_FILES['userfile']['name'];
// 根据 _ 符号把字符串切分为 str[0]=2 和 str[1] = 20190719
$str = explode("_",$filename);
//$id =2
$id =$str[0];
$str2 = explode(".",$str[1]);
//$date =20190719
$date = $str2[0];
// 判断解压到的目标地址是否存在,如果不存在就创建新的文件夹
//创建的目录为./assets/file/2/20190719
if (!is_dir('./assets/file/'.$id.'/'.$date.'/')) {
mkdir('./assets/file/'.$id.'/'.$date.'/', 0777, TRUE);
}
//将./assets/temp/2_20190719解压到 ./assets/file/2/20190719
$this->unzip->extract('./assets/temp/'.$data['upload_data']['file_name'],'./assets/file/'.$id.'/'.$date.'/');
}
}