PHP Laravel 上传图片、文件等类封装
author:一佰互联 2019-04-26   click:192

今天把项目中上传功能封装成类,方便后面使用,简单的封装了一下,感觉还不怎么好,后面继续优化。

具体代码如下:

<?php /**  * Created by PhpStorm.  * User: wady www.bcty365.com  * Date: 2017/8/16  * Time: 14:52  */ namespace AppThinkClass; use SymfonyComponentHttpFoundationFileUploadedFile; class UploadClass {   /**    * @var UploadedFile $file;    */   protected $file;   /**    * 上传错误信息    * @var string    */   private $error = ""; //上传错误信息   private $fullPath="";//绝对地址   private $config = array(     "maxSize"    => 3*1024*1024, //上传的文件大小限制 (0-不做限制)     "exts"     => array("jpg","jpeg","gif","png","doc","docx","xls","xlsx","ppt","pptx","pdf","rar","zip"), //允许上传的文件后缀     "subName"    => "", //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组     "rootPath"   => "/uploads/", //保存根路径     "savePath"   => "", //保存路径     "thumb"     => array(),//是裁剪压缩比例   );   public function __construct($config = array()){     /* 获取配置 */     $this->config  =  array_merge($this->config, $config);     if(!emptyempty($this->config["exts"])){       if (is_string($this->exts)){         $this->config["exts"] = explode(",", $this->exts);       }       $this->config["exts"] = array_map("strtolower", $this->exts);     }     $this->config["subName"] = $this->subName ? ltrim($this->subName,"/") : "/".date("Ymd");     $this->fullPath = rtrim(public_path(),"/").$this->config["rootPath"];   }   public function __get($name) {     return $this->config[$name];   }   public function __set($name,$value){     if(isset($this->config[$name])) {       $this->config[$name] = $value;     }   }   public function __isset($name){     return isset($this->config[$name]);   }   /**    * 获取最后一次上传错误信息    * @return string 错误信息    */   public function getError(){     return $this->error;   }   public function upload($file){      if(emptyempty($file)){        $this->error = "没有上传的文件";        return false;      }      if(!$this->checkRootPath($this->fullPath)){        $this->error = $this->getError();        return false;      }      $fileSavePath=$this->fullPath.$this->savePath.$this->subName;      if(!$this->checkSavePath($fileSavePath)){        $this->error = $this->getError();        return false;      }      $files =array();      if(!is_array($file)){        //如果不是数组转成数组        $files[]=$file;      }else{        $files=$file;      }     $info  = array();      $imgThumb = new AppThinkClassThumbClass();      foreach ($files as $key=>$f){        $this->file=$f;         $f->ext = strtolower($f->getClientOriginalExtension());        /*文件上传检查*/        if (!$this->check($f)){          continue;        }        $fileName = str_random(12).".".$f->ext;        /* 保存文件 并记录保存成功的文件 */        if ($this->file->move($fileSavePath,$fileName)) {          /*图片按照宽高比例压缩*/          Log::notice($fileSavePath.$fileName);          if(!emptyempty($this->thumb) && is_array($this->thumb)){            $imgThumb ->thumb($this->thumb,$fileSavePath."/".$fileName);          }          $info[]=$this->rootPath.$this->savePath.$this->subName."/".$fileName;        }      }      return is_array($info) ? $info : false;   }   /**    * 检测上传根目录    * @param string $rootpath  根目录    * @return boolean true-检测通过,false-检测失败    */   protected function checkRootPath($rootpath){     if(!(is_dir($rootpath) && is_writable($rootpath))){       $this->error = "上传根目录不存在!";       return false;     }     return true;   }   /**    * 检测上传目录    * @param string $savepath 上传目录    * @return boolean     检测结果,true-通过,false-失败    */   public function checkSavePath($savepath){     /* 检测并创建目录 */     if (!$this->mkdir($savepath )) {       return false;     } else {       /* 检测目录是否可写 */       if (!is_writable($savepath)) {         $this->error = "上传目录不可写!";         return false;       } else {         return true;       }     }   }   /**    * 检查上传的文件    * @param array $file 文件信息    */   private function check($file) {     /* 检查文件大小 */     if (!$this->checkSize($file->getSize())) {       $this->error = "上传文件大小不符!";       return false;     }     /* 检查文件后缀 */     if (!$this->checkExt($file->ext)) {       $this->error = "上传文件后缀不允许";       return false;     }     /* 通过检测 */     return true;   }   /**    * 检查文件大小是否合法    * @param integer $size 数据    */   private function checkSize($size) {     return !($size > $this->maxSize) || (0 == $this->maxSize);   }   /**    * 检查上传的文件后缀是否合法    * @param string $ext 后缀    */   private function checkExt($ext) {     return emptyempty($this->config["exts"]) ? true : in_array(strtolower($ext), $this->exts);   }   /**    * 创建目录    * @param string $savepath 要创建的穆里    * @return boolean     创建状态,true-成功,false-失败    */   protected function mkdir($savepath){     if(is_dir($savepath)){       return true;     }     if(mkdir($savepath, 0777, true)){       return true;     } else {       $this->error = "目录创建失败";       return false;     }   } }

使用案例:

头部引用  use AppThinkClassUploadClass; 

$upload = new UploadClass(); $upload->exts=array("jpg","png"); $upload->maxSize=5*1024*1024; $upload->savePath="course/uid_6"; $file = $request->file("fileImg"); $aa = $upload->upload($file); dd($aa);

总结

以上所述是小编给大家介绍的PHP Laravel 上传图片、文件等类封装,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网页设计网站的支持!