成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導(dǎo)航首頁 ? 技術(shù)教程 ? PHP Laravel 上傳圖片、文件等類封裝
全站頭部文字 我要出現(xiàn)在這里
PHP Laravel 上傳圖片、文件等類封裝 784 2023-12-10   

今天把項(xiàng)目中上傳功能封裝成類,方便后面使用,簡單的封裝了一下,感覺還不怎么好,后面繼續(xù)優(yōu)化。

具體代碼如下:

<?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; 
  /** 
   * 上傳錯(cuò)誤信息 
   * @var string 
   */ 
  private $error = ''; //上傳錯(cuò)誤信息 
  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'    => '', //子目錄創(chuàng)建方式,[0]-函數(shù)名,[1]-參數(shù),多個(gè)參數(shù)使用數(shù)組 
    '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]); 
  } 
  /** 
   * 獲取最后一次上傳錯(cuò)誤信息 
   * @return string 錯(cuò)誤信息 
   */ 
  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)){ 
       //如果不是數(shù)組轉(zhuǎn)成數(shù)組 
       $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     檢測結(jié)果,true-通過,false-失敗 
   */ 
  public function checkSavePath($savepath){ 
    /* 檢測并創(chuàng)建目錄 */ 
    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 數(shù)據(jù) 
   */ 
  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); 
  } 
  /** 
   * 創(chuàng)建目錄 
   * @param string $savepath 要創(chuàng)建的穆里 
   * @return boolean     創(chuàng)建狀態(tài),true-成功,false-失敗 
   */ 
  protected function mkdir($savepath){ 
    if(is_dir($savepath)){ 
      return true; 
    } 
    if(mkdir($savepath, 0777, true)){ 
      return true; 
    } else { 
      $this->error = "目錄創(chuàng)建失敗"; 
      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);

總結(jié)

以上所述是小編給大家介紹的PHP Laravel 上傳圖片、文件等類封裝,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對綠夏網(wǎng)網(wǎng)站的支持!


主站蜘蛛池模板: 美国派7| 色蝴蝶| 妈妈的朋友泡妞| 夏娃诱惑| 讯息 电影| 小猪佩奇免费版中文第三季| 《致命弯道3》| 四川地图旅游地图| jerry springer| 雪中悍刀行第一季电视剧免费观看| 永远的紫荆花简谱| 西安甑糕怎么读| 李顺载| 成人生活| 小说改编电视剧| 叶子楣作品| 保镖电影在线完整观看| 10的认识评课优点及不足| 美女写真视频网站| 中国少先队队歌歌词| 根深蒂固韩国电影| 大奉打更人电视剧在线观看全集免费播放| 《与凤行》演员表| 怡红院成人影院| 王李| 张柏芝艳照无删减版| 可爱美女跳舞蹈视频| 广川| 麻豆视频观看| 美女操p| 竹内美宥| 40集电视连续剧人生之路| 雪山飞狐 1991 孟飞| 最贵的香烟| 伊迪娜·门泽尔| 舞法天女之绚彩归来演员表| 创新点| 凤凰资讯台| 美女拉屎| 巧巧| 金允石|

!!!站長長期在線接!!!

網(wǎng)站、小程序:定制開發(fā)/二次開發(fā)/仿制開發(fā)等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103