中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在PHP中使用Laravel上傳圖片

發布時間:2021-02-25 17:30:28 來源:億速云 閱讀:183 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關如何在PHP中使用Laravel上傳圖片,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

具體代碼如下:

<?php 
namespace App\ThinkClass; 
use Symfony\Component\HttpFoundation\File\UploadedFile; 
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 \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; 
  } 
  /** 
   * 檢測上傳根目錄 
   * @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 App\ThinkClass\UploadClass; 

$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上傳圖片有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

屯昌县| 汶川县| 松桃| 潞西市| 鹤庆县| 琼中| 调兵山市| 岐山县| 商丘市| 交口县| 乐亭县| 阳谷县| 修武县| 体育| 黄骅市| 宜章县| 日土县| 靖州| 喀喇沁旗| 凤阳县| 三门县| 获嘉县| 兴国县| 九江市| 昌图县| 平顺县| 桃源县| 宜丰县| 新民市| 安康市| 桦甸市| 密云县| 东方市| 葫芦岛市| 西充县| 蓬安县| 鹤壁市| 南溪县| 延庆县| 乐安县| 富平县|