PHP
PHP实现多张图片上传
PHP实现多张图片上传
最近在做一个项目模块的时候,需要用到多张图片上传,博主使用的是原生PHP,所以将多张图片上传
的代码跟大家分享一下。首先我们先写前端代码:
然后是后端PHP代码,负责接收前端传过来的图片并保存在本地,代码如下:
#获取用户上传的文件 $files = getFile(); #判断是否上传了文件 if (count($files) 9) { echo "图片上传最大数为9张"; exit(); } #初始化保存地址数组 $returnList = array(); #循环遍历文件 foreach ($files as $fileInfo) { #上传文件 $res = uploadFile($fileInfo); #判断是否上传成功 if ($res["code"] != 200) { //删除本地文件【防止占用空间】 deleteImage($returnList); //返回 echo $res["msg"]; exit(); } #添加进待上传至数组 $returnList[] = $res["msg"]; } #返回 return $returnList; //////////////////// 操作本地图片方法 /////////////////// /** * 获取用户上传的图片元素 * @return array */ function getFile() { $i = 0; $files = array(); foreach ($_FILES as $file) { if (is_string($file['name'])) { $files['$i'] = $file; $i++; } elseif (is_array($file['name'])) { foreach ($file['name'] as $k => $v) { $files[$i]['name'] = $file['name'][$k]; $files[$i]['type'] = $file['type'][$k]; $files[$i]['tmp_name'] = $file['tmp_name'][$k]; $files[$i]['error'] = $file['error'][$k]; $files[$i]['size'] = $file['size'][$k]; $i++; } } } return $files; } /** * 文件上传至本地 * @param $file * @param string $path * @param int $max_size * @param array $allowExt * @return array */ function uploadFile($file,$path='uploads',$max_size=3000000,$allowExt=['jpeg', 'jpg', 'png']) { #获取图片基础参数 $filename = $file['name']; $type = $file['type']; $temp_name = $file['tmp_name']; $error = $file['error']; $size = $file['size']; #判断 if ($error == UPLOAD_ERR_OK) { //判断大小是否超过 if ($size > $max_size) { return array( 'code' => 404, 'msg' => $filename . "文件超过规定上传大小" ); } //判断是否是上传图片 $ext = getExt($filename); if (!in_array($ext, $allowExt)) { return array( 'code' => 404, 'msg' => $filename . '文件名不合乎规范' ); } //判断传输方式 if (!is_uploaded_file($temp_name)) { return array( 'code' => 404, 'msg' => $filename . "文件不是通过HTTP POST 方法上传上传过来的" ); } //判断暂时存放地方是否有权限 if (!file_exists($path)) { mkdir($path, 0777, true); chmod($path, 0777); } //重新命名图片名字 $fileName = getUniName(); $destination = $path . '/' . $fileName . '.' . $ext; if (move_uploaded_file($temp_name, $destination)) { return array( 'code' => 200, 'msg' => $destination ); } else { return array( 'code' => 404, 'msg' => $filename . "文件上传失败" ); } } else { switch ($error) { case '1': return array( 'code' => 404, 'msg' => "超过了配置文件上传文件的大小" ); break; case '2': return array( 'code' => 404, 'msg' => "超过表单设置上传文件文件的大小" ); break; case '3': return array( 'code' => 404, 'msg' => "文件部分被上传" ); break; case '4': return array( 'code' => 404, 'msg' => "没有文件被上传" ); break; case '6': return array( 'code' => 404, 'msg' => "没有找到临时目录" ); break; case '7': return array( 'code' => 404, 'msg' => "文件不可写" ); break; default: return array( 'code' => 404, 'msg' => "上传文件失败" ); break; } } } /** * 获得文件扩展名 * @param string $filename 上传文件名 * @return string 返回扩展名 */ function getExt($filename) { $arr = explode('.', basename($filename)); return end($arr); } /** * 获得文件唯一扩展名 * @return string 经过md5后生成32位唯一的上传文件名 */ function getUniName() { return md5(uniqid(microtime(true), true)); } /** * 删除本地图片【发生错误或者上传不上去】 * @param $imageList */ function deleteImage($imageList) { if (count($imageList) > 0) { foreach ($imageList as $key => $value) { if (file_exists($value)) { unlink($value); } } } }
这样我们就成功实现多张图片上传并防止中途出现意外,图片存留问他。
0条评论