温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何在PHP中使用Laravel上传图片

发布时间:2021-02-25 17:30:28 来源:亿速云 阅读:209 作者: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