久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

PHP Laravel 上傳圖片、文件等類封裝

這篇文章主要介紹了PHP Laravel 上傳圖片、文件等類封裝的實(shí)現(xiàn)代碼,需要的朋友可以參考下

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

具體代碼如下:

<?php 
/** 
 * Created by PhpStorm. 
 * User: wady www.bcty365.com 
 * Date: 2017/8/16 
 * Time: 14:52 
 */ 
namespace App\ThinkClass; 
use Symfony\Component\HttpFoundation\File\UploadedFile; 
class UploadClass 
{ 
  /** 
   * @var UploadedFile $file; 
   */ 
  protected $file; 
  /** 
   * 上傳錯(cuò)誤信息 
   * @var string 
   */ 
  private $error = ''; //上傳錯(cuò)誤信息 
  private $fullPath='';//絕對(duì)地址 
  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 = '沒(méi)有上傳的文件'; 
       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 \App\ThinkClass\ThumbClass(); 
     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; 
  } 
  /** 
   * 檢測(cè)上傳根目錄 
   * @param string $rootpath  根目錄 
   * @return boolean true-檢測(cè)通過(guò),false-檢測(cè)失敗 
   */ 
  protected function checkRootPath($rootpath){ 
    if(!(is_dir($rootpath) && is_writable($rootpath))){ 
      $this->error = '上傳根目錄不存在!'; 
      return false; 
    } 
    return true; 
  } 
  /** 
   * 檢測(cè)上傳目錄 
   * @param string $savepath 上傳目錄 
   * @return boolean     檢測(cè)結(jié)果,true-通過(guò),false-失敗 
   */ 
  public function checkSavePath($savepath){ 
    /* 檢測(cè)并創(chuàng)建目錄 */ 
    if (!$this->mkdir($savepath )) { 
      return false; 
    } else { 
      /* 檢測(cè)目錄是否可寫(xiě) */ 
      if (!is_writable($savepath)) { 
        $this->error = '上傳目錄不可寫(xiě)!'; 
        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; 
    } 
    /* 通過(guò)檢測(cè) */ 
    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 要?jiǎng)?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; 
    } 
  } 
}

使用案例:

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過(guò)測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

1、PbootCMS后臺(tái)正常使用,ueditor編輯界面可以顯示, 但單圖片上傳按鈕點(diǎn)擊沒(méi)反應(yīng),多圖片上傳顯示后臺(tái)配置項(xiàng)返回格式出錯(cuò),上傳功能將不能正常使用! 2、打開(kāi)瀏覽器調(diào)試模式,顯示
下面小編就為大家分享一篇laravel ORM 只開(kāi)啟created_at的幾種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
這篇文章主要給大家介紹了如何通過(guò)源碼解析Laravel的依賴注入的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關(guān)于Laravel中unique和exists驗(yàn)證規(guī)則的優(yōu)化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面
最近在使用laravel5.5,利用其實(shí)現(xiàn)了一個(gè)功能,下面分享給大家,這篇文章主要給大家介紹了關(guān)于Laravel 5.5基于內(nèi)置的Auth模塊如何實(shí)現(xiàn)前后臺(tái)登陸的相關(guān)資料,文中通過(guò)示例代碼介紹的非
laravel 的隊(duì)列服務(wù)對(duì)各種不同的后臺(tái)隊(duì)列服務(wù)提供了統(tǒng)一的 API,下面這篇文章通過(guò)源碼分析給大家介紹了關(guān)于 Laravel 重復(fù)執(zhí)行同一個(gè)隊(duì)列任務(wù)的原因,文中通過(guò)示例代碼介紹的非常詳細(xì)
主站蜘蛛池模板: 伊人色综合久久久天天蜜桃 | 999久久久国产精品 欧美成人h版在线观看 | 国产精品99久久久久久动医院 | 久久国产精品99久久久大便 | 97人澡人人添人人爽欧美 | 国产激情一区二区三区 | a级在线免费视频 | 久久成人av电影 | 日韩欧美在线一区 | 国产一级久久久久 | 国产一区视频在线 | 国产成人精品免高潮在线观看 | 欧美日韩91 | 北条麻妃视频在线观看 | 久久51| 中文字幕在线不卡 | 欧美视频一区二区三区 | 可以在线看的黄色网址 | 亚洲成av人影片在线观看 | 亚洲成人免费在线观看 | 国产色| 九九av| 久久国产精品视频 | 欧美精品一区二区在线观看 | 在线免费黄色小视频 | 狠狠亚洲| 精品国产女人 | 亚洲美女一区 | 亚洲一区二区免费电影 | 久久精品亚洲欧美日韩久久 | a免费视频 | 狠狠热视频 | 久久久区 | 精品国产乱码久久久久久蜜柚 | 99pao成人国产永久免费视频 | 青青久草 | 日本亚洲一区 | 国色天香综合网 | 欧美成人精品欧美一级 | 免费一级淫片aaa片毛片a级 | 在线欧美小视频 |