index.php 压缩包处理,上传文件处理
<?php
include('ziper.class.php');




/*接收base64的jpg图片编码,转换为图片*/
try {

$file = $_FILES['image'];

// 判断文件是否上传
if (!is_uploaded_file($file['tmp_name'])){
throw new Exception("没找到上传的文件");
}
// 上传文件
$fileName = 'upload\\'.$file['name'];

if (!move_uploaded_file($file['tmp_name'],$fileName)){
echo "文件已上传,但是移动时出现错误";
}


$usezip = new Ziper();
//$unzipDir = "./face/".date('YmdHis').mt_rand();
$unzipDir = './temp';
$unzipRes = $usezip->unzip($fileName, $unzipDir);//解压file.zip到文件夹dir
if($unzipRes!==true){
throw new Exception($unzipRes);
}
$dirPic = $unzipDir."/person/";


$imgList = getImgList($dirPic);
if (empty($imgList)) {
throw new Exception("图片列表是空的");
}

//移动文件到指定目录
$result = moveBatch($imgList, 10);
if($result['success']==$result['all']){

delDir($unzipDir);
}

$arr = [
'code' => 200,
'data' => $result,
'msg' => 'success'
];
echo json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
} catch (Exception $ex) {
$error_arr = [
'code' => 400,
'data' => $ex->getMessage(),
'msg' => 'error'
];
echo json_encode($error_arr, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}

 

工具类
<?php
/**
* ****************************************************************
* 标题:Ziper类
* 作者:Gqleung
* 邮箱:admin@plasf.cn
* 博客:www.plasf.cn
*
* 描述:在PHP-ZipArchive类的基础上进行二次封装使得调用更加便捷
* zip方法:用于压缩文件/文件夹
* contents_to_zip方法:该方法可以在Zip文件里面写入指定文件和内容
* unzip方法:解压zip文件
* **************************************************************
*/
class Ziper{
protected $ziper;
protected $zipfilename;
public function __construct(){
$this->ziper = new ZipArchive();
}
/**
* [zip description]
* @param string $filename 新建压缩文件的文件名,若不符合(*.zip)格式将自动添加zip后缀
* @param string $Fromfilename 被压缩文件/文件夹的路径
* @return string 若错误返回错误信息,若压缩成功将返回 TRUE
*/
public function zip($filename='',$Fromfilename){
if (!empty($filename) && preg_match('/zip/m', $filename)){
if(!$this->ziper->open($filename, ZipArchive::CREATE))
return 'File open failed';
}elseif(!empty($filename)&& !preg_match('/zip/m', $filename)){
$filename = $filename.'zip';
if(!$this->ziper->open($filename, ZipArchive::CREATE))
return 'File open failed';
}
if(is_dir($Fromfilename)){
$list_dir = scandir($Fromfilename);
for($i=2;$i<count($list_dir);$i++){
if(is_dir($Fromfilename.'/'.$list_dir[$i])){
$this->ziper->addGlob($Fromfilename.'/'.$list_dir[$i].'/*.*', 0, array('add_path' => $Fromfilename.'/'.$list_dir[$i].'/', 'remove_path' => $Fromfilename.'/'.$list_dir[$i]));
$list_chr = scandir($Fromfilename.'/'.$list_dir[$i]);
for($j=2;$j<count($list_chr);$j++){
if(is_dir($Fromfilename.'/'.$list_dir[$i].'/'.$list_chr[$j])){
echo $list_chr[$j];
$this->zip('',$Fromfilename.'/'.$list_dir[$i].'/'.$list_chr[$j]);

}
}

}
}
}else{
$this->ziper->addFile ($Fromfilename);
}
return TRUE;

}
/**
* [contents_to_zip description]
* @param string $filename 压缩文件名
* @param string $zipfilename 需要向压缩文件写入的文件名
* @param string $content 写入文件的内容
* @return string 成功返回True,否则返回错误内容
*/
public function contents_to_zip($filename,$zipfilename,$content){
if(!$this->ziper->open($filename, ZipArchive::CREATE))
return 'File open failed';
if(!$this->ziper->addFromString ($zipfilename, $content))
return 'File write failed';
return TRUE;

}
/**
* [unzip description]
* @param string $filename 被压缩文件路径名
* @param string $dir 解压缩所到目录
* @return string 返回错误原因
*/
public function unzip($filename,$dir){
if(!file_exists($filename))
return 'File does not exist';
if(!$this->ziper->open($filename))
return 'File open failed';
if(!is_dir($dir)){
mkdir($dir,0775,true);
}

if(!$this->ziper->extractTo($dir))
return 'File unzip failed';
return TRUE;
}
public function __destruct() {
$this->ziper->close();
}

}
//验证是否是图片
function isImage($filepath)
{
$imgType = array('png', 'jpg', 'jpeg');
list($filename, $kzm) = explode('.', $filepath); //获取扩展名
if (in_array($kzm, $imgType)) {
return true;
}
}

//获取图片文件列表函数
function getImgList($dir)
{
$files = array();
if (is_dir($dir)) {
$file_dir = scandir($dir);
foreach ($file_dir as $file) {
if ($file == '.' || $file == '..') {
continue;
} elseif (is_dir($dir . $file . '/')) {
$files = array_merge($files, getImgList($dir . $file . '/'));
} else {
if (isImage($dir . $file) !== false) {

array_push($files, $dir . $file);
}
}
}
}
return $files;
}

//移动文件
function moveBatch($pictureList, $addressId)
{

$typePath = 'face';
$str_fileDir = sprintf("%s/%s/%s", $typePath, $addressId, date('Ymd'));
if (!is_dir($str_fileDir)) {
mkdir($str_fileDir, 0755, true);
}

$success = 0;
$fail = 0;
$all = count($pictureList);
foreach ($pictureList as $key => $value) {
$temp = explode("/", $value);
$filename = array_pop($temp);
$copyRes = copy($value, $str_fileDir . '/' . $filename);
if ($copyRes === false) {
$fail++;
} else {
unlink($value);
$success++;
}
}


return ['success' => $success, 'fail' => $fail, 'all' => $all];

}

//function deleteDir($dir){
// if(is_dir($dir)){
// if($dp=opendir($dir)){
// while (($file = readdir($dp))!=false){
//
// if($file=='.'||$file=='..'){
// echo $file.PHP_EOL;
// continue;
// }
// $subFile=$dir."/".$file;//将目录下的文件与当前目录相连
// if(is_readable($subFile)&&count(scandir($subFile))==2){
// echo $subFile.'111';
// rmdir($subFile);
// }
// if(is_dir($subFile)){
// echo $subFile.'222';
// deleteDir($subFile);
// }
// if(is_file($subFile)){
// echo $subFile.'333';
// unlink($subFile);
// }
// }
// closedir($dp);
// }else{
// exit("not permission");
// }
// }else{
// exit("not dir");
// }
//}
function delDir($directory){//自定义函数递归的函数整个目录

if(file_exists($directory)){//判断目录是否存在,如果不存在rmdir()函数会出错

if($dir_handle=@opendir($directory)){//打开目录返回目录资源,并判断是否成功

while($filename=readdir($dir_handle)){//遍历目录,读出目录中的文件或文件夹

if($filename!='.' && $filename!='..'){//一定要排除两个特殊的目录

$subFile=$directory."/".$filename;//将目录下的文件与当前目录相连

if(is_dir($subFile)){//如果是目录条件则成了

delDir($subFile);//递归调用自己删除子目录

}

if(is_file($subFile)){//如果是文件条件则成立

unlink($subFile);//直接删除这个文件

}

}

}

closedir($dir_handle);//关闭目录资源

rmdir($directory);//删除空目录

}

}

}
?>

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>文件上传</title>
</head>
<body>
<!-- form表单文件上传时,必须使用 enctype 属性为 multipart/form-data -->
<form action="index.php" method="POST" enctype="multipart/form-data">
<input type="file" name="image">
<p></p>
<input type="submit" name="上传文件">
</form>
</body>
</html>