巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
赞助文档Help

PHP Laravel 上传图片、文件等类封装

一佰互联网站建造(www.taishanly.com) 宣布日期 2020-04-25 14:41:30 阅读数: 142

明天把名目中上传功效封装成类,便利前面利用,简略的封装了一下,感受还不怎样好,前面持续优化。

具体代码以下:

<?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 上传图片、文件等类封装,但愿对大师有所赞助,若是大师有任何疑难请给我留言,小编会实时答复大师的。在此也很是感激大师对网页设想网站的撑持!

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。

相干消息more

11
04月
没人带的设想师,若何学会用自驱力帮本身生长?

@苏大牙牙牙:尽人皆知,像专业常识、设想技法、设想的体例论,对设想师来讲很是主要,也是安身之本。可是,跟着任务的时候越久更加现,自驱力、工... >>概况

11
04月
设想生活生计的转机点在那里?看看这10位创意人的

转变老是不可避免的。不转变,就不明天的咱们。天天,转变都在以一种难以发觉的体例产生,悄无声气地成绩着咱们人生每座主要的里程碑,比方成婚... >>概况

09
02月
网站扶植建造中的网站架构搭建常识

网站扶植建造已不是甚么新颖工作了,巅云建站对成立一个网站的观点便是要先领会网站的架构。此刻收集上的网站良多都是迥然不同用的模板就本上都是... >>概况

20
04月
html5 兼容IE6布局的完成代码

复制代码代码以下: document.createElement("header"); document.createElement("na... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站