侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Laravel  /  管理员 发布于 5年前   284

今天把项目中上传功能封装成类,方便后面使用,简单的封装了一下,感觉还不怎么好,后面继续优化。

具体代码如下:

 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 上传图片、文件等类封装,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!

您可能感兴趣的文章:

  • Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
  • vuejs+element-ui+laravel5.4上传文件的示例代码
  • 修改Laravel5.3中的路由文件与路径
  • 在Laravel5中正确设置文件权限的方法
  • PHP框架laravel的.env文件配置教程
  • Laravel最佳分割路由文件(routes.php)的方式
  • PHP Laravel实现文件下载功能
  • Laravel框架文件上传功能实现方法示例
  • Laravel基础-关于引入公共文件的两种方式
  • 使用laravel指定日志文件记录任意日志
  • Laravel5.1 框架文件管理操作实例分析


  • 上一条:
    php mysql Errcode: 28 终极解决方法
    下一条:
    PHP mail()函数使用及配置方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • Laravel 11.14版本发布 - 新的字符串助手和ServeCommand改进(0个评论)
    • Laravel 11.12版本发布 - Artisan的`make`命令自动剪切`.php `扩展(0个评论)
    • Laravel的轻量型购物车扩展包:binafy/laravel-cart(0个评论)
    • Laravel 11.11版本发布 - 查看模型中的第三方关系:show(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-01
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客