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

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

具体代码如下:

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;

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 上传图片、文件等类封装,希望对大家有所帮助。程序员遇到问题都会上(编程之家jb51.cc)查找问题解答方法!如果觉得站点还不错,随手转发给程序员朋友一下!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


laravel的dd函数不生效怎么办
看不懂laravel文档咋办
安装laravel框架出现command怎么办
Laravel开发API怎么使用事务
laravel怎么构建复杂查询条件
laravel如何实现防止被下载
为什么laravel比yii火
一些常见的Laravel定时任务不运行的问题
laravel用路由有什么好处
composer无法安装laravel怎么办
laravel现在还用吗
laravel怎么替换主键id
laravel的appurl有什么用
如何修改Laravel的报错输出形式
laravel怎么避免foreach查表
laravel怎样操作数据库
laravel怎么截取字符串
laravel 是国内的吗
laravel怎么设置请求头
浅析Laravel社区Redis组件报错的问题和解决方法