PHP Laravel 上传图片、文件等类封装
网络编程 2021-07-05 08:24www.168986.cn编程入门
这篇文章主要介绍了PHP Laravel 上传图片、文件等类封装的实现代码,需要的朋友可以参考下
今天把项目中上传功能封装成类,方便后面使用,简单的封装了一下,感觉还不怎么好,后面继续优化。
具体代码如下
<?php / Created by PhpStorm. User: wady .bcty365. Date: 2017/8/16 Time: 14:52 / 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' => 310241024, //上传的文件大小限制 (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=510241024; $upload->savePath='course/uid_6'; $file = $request->file('fileImg'); $aa = $upload->upload($file); dd($aa);
以上所述是长沙网络推广给大家介绍的PHP Laravel 上传图片、文件等类封装,希望对大家有所帮助,如果大家有任何疑问请给我留言,长沙网络推广会及时回复大家的。在此也非常感谢大家对狼蚁SEO网站的支持!
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程