Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PHP Laravel 上传图片、文件等类封装

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

作者头像
用户2323866
修改于 2021-06-30 02:40:38
修改于 2021-06-30 02:40:38
2.1K0
举报
文章被收录于专栏:技术派技术派

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

<?php /**

  • Created by PhpStorm.
  • User: wady www.bcty365.com
  • Date: 2017/8/16
  • Time: 14:52 */

namespace AppThinkClass; use SymfonyComponentHttpFoundationFileUploadedFile; 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-&gt;config = array_merge($this->config, $config); if(!emptyempty($this->config['exts'])){ if (is_string($this->exts)){ $this-&gt;config['exts'] = explode(',', $this->exts); } $this-&gt;config['exts'] = array_map('strtolower', $this->exts); } $this-&gt;config['subName'] = $this->subName ? ltrim($this->subName,'/') : '/'.date('Ymd'); $this-&gt;fullPath = rtrim(public_path(),'/').$this->config['rootPath']; } public function __get($name) { return $this-&gt;config[$name]; } public function __set($name,$value){ if(isset($this-&gt;config[$name])) { $this-&gt;config[$name] = $value; } } public function __isset($name){ return isset($this-&gt;config[$name]); } /**

  • 获取最后一次上传错误信息
  • @return string 错误信息 */

public function getError(){ return $this->error; } public function upload($fi//le){ if(emptyempty($file)){ $this->error = '没有上传的文件'; return false; } if(!$this-&gt;checkRootPath($this->fullPath)){ $this-&gt;error = $this->getError(); return false; } $fileSavePath=$this->fullPath.$this-&gt;savePath.$this->subName; if(!$this-&gt;checkSavePath($fileSavePath)){ $this-&gt;error = $this->getError(); return false; } $files =array(); if(!is_array($file)){ //如果不是数组转成数组 $files[]=$file; }else{ $files=$file; } $info = array(); $imgThumb = new AppThinkClassThumbClass(); foreach ($files as $key=>$f){ $this-&gt;file=$f; $f-&gt;ext = strtolower($f->getClientOriginalExtension()); /文件上传检查/ if (!$this-&gt;check($f)){ continue; } $fileName = str_random(12).'.'.$f->ext; / 保存文件 并记录保存成功的文件 / if ($this-&gt;file-&gt;move($fileSavePath,$fileName)) { /图片按照宽高比例压缩/ Log::notice($fileSavePath.$fileName); if(!emptyempty($this-&gt;thumb) &amp;&amp; is_array($this->thumb)){ $imgThumb -&gt;thumb($this->thumb,$fileSavePath.'/'.$fileName); } $info[]=$this->rootPath.$this-&gt;savePath.$this->subName.'/'.$fileName; } } return is_array($info) &#63; $info : false; } /**

  • 检测上传根目录
  • @param string $rootpath 根目录
  • @return boolean true-检测通过,false-检测失败 */

protected function checkRootPath($rootpath){ if(!(is_dir($rootpath) &amp;&amp; is_writable($rootpath))){ $this->error = '上传根目录不存在!'; return false; } return true; } /**

  • 检测上传目录
  • @param string $savepath 上传目录
  • @return boolean 检测结果,true-通过,false-失败 */

public function checkSavePath($savepath){ / 检测并创建目录 / if (!$this-&gt;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-&gt;checkSize($file->getSize())) { $this->error = '上传文件大小不符!'; return false; } / 检查文件后缀 / if (!$this-&gt;checkExt($file->ext)) { $this->error = '上传文件后缀不允许'; return false; } / 通过检测 / return true; } /**

  • 检查文件大小是否合法
  • @param integer $size 数据 */

private function checkSize($size) { return !($size &gt; $this->maxSize) || (0 == $this->maxSize); } /**

  • 检查上传的文件后缀是否合法
  • @param string $ext 后缀 */

private function checkExt($ext) { return emptyempty($this-&gt;config['exts']) &#63; 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 AppThinkClassUploadClass; 

$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 上传图片、文件等类封装,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持! /【参考文章的时候,并不建议直接复制,应该尽量地读懂】/

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
BeautifulSoup的基本使用
注意事项: 创建soup对象时如果不传’lxml’或者features="lxml"会出现以下警告
hacker707
2022/11/27
1.4K0
BeautifulSoup的基本使用
BeautifulSoup4中文文档
1、解析html并以友好形式显示:BeautifulSoup(html_doc,'html.parser') print(soup.prettify()) html_doc = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title"><b>The Dormouse's story</b></p>
用户5760343
2022/05/14
4020
BeautifulSoup使用
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment .
听城
2018/08/30
1K0
BeautifulSoup文档4-详细方法 | 用什么方法对文档树进行搜索?
BeautifulSoup的文档搜索方法有很多,官方文档中重点介绍了两个方法: find() 和 find_all() 下文中的实例,依旧是官网的例子: html_doc = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were three
虫无涯
2023/02/22
1K0
HTML解析大法|牛逼的Beautiful Soup!
今天给大家来讲讲强大牛逼的HTML解析库---Beautiful Soup,面对html的解析毫无压力,有多强?下面给大家慢慢道来!
Python进击者
2019/06/21
1.5K0
​Python 操作BeautifulSoup4
BeautifulSoup4是爬虫里面需要掌握的一个必备库,通过这个库,将使我们通过requests请求的页面解析变得简单无比,再也不用通过绞尽脑汁的去想如何正则该如何匹配内容了。(一入正则深似海虽然它使用起来效率很高效哈)
度假的小鱼
2023/11/18
3770
​Python 操作BeautifulSoup4
Python学习笔记(BeautifulSoup选择器)
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间。
python与大数据分析
2022/03/11
3310
BeautifulSoup爬取数据常用方法总结
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.
北山啦
2022/11/27
7950
BeautifulSoup爬取数据常用方法总结
Python 爬虫之网页解析库 BeautifulSoup
BeautifulSoup 是一个使用灵活方便、执行速度快、支持多种解析器的网页解析库,可以让你无需编写正则表达式也能从 html 和 xml 中提取数据。BeautifulSoup 不仅支持 Python 内置的 Html 解析器,还支持 lxml、html5lib 等第三方解析器。
keinYe
2019/08/01
1.3K0
​Python爬虫-BeautifulSoup详解
上一节我们已经可以获取到网页内容,但是获取到的却是一长串的 html 代码,并不是我们想要的数据。那这一节,我们就来看看怎么去解析这些网页,轻松的拿到我们想要的数据。
小一不二三
2019/12/31
1.5K0
​Python爬虫-BeautifulSoup详解
python︱HTML网页解析BeautifulSoup学习笔记
一、载入html页面信息 一种是网站在线的网页、一种是下载下来的静态网页。 1、在线网页 参考《python用BeautifulSoup库简单爬虫入门+案例(爬取妹子图)》中的载入内容: import
悟乙己
2018/01/02
3.3K0
BeautifulSoup文档3-详细方法 | 如何对文档树进行遍历?
以下实例还是官网的例子: html_doc = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were three little sisters; and their names were <a href="http://example.
虫无涯
2023/02/22
6830
爬虫入门(三):BeautifulSoup
BeautifulSoup4.x 兼容性不好,选用BeautifulSoup3.x + Python 2.x. 下载安装包放在/lib文件下,DOS下输入: 1 python setup.py build 2 python setup.py install
一点儿也不潇洒
2018/08/07
4760
BeautifulSoup文档1-简介、安装和使用
注意:以下实例来源于BeautifulSoup官方文档:Beautiful Soup 4.4.0 文档。
虫无涯
2023/02/21
4780
Python爬虫(十四)_BeautifulSoup4 解析器
CSS选择器:BeautifulSoup4 和lxml一样,Beautiful Soup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据。 lxml只会局部遍历,而Beautiful Soup是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml。 BeautifulSoup用来解析HTML比较简单,API非常人性化,支持CSS选择器、Python标准库中的HTML解析器,也支持lxml的XML解析器。 Bea
用户1174963
2018/01/17
8530
Python爬虫(十四)_BeautifulSoup4 解析器
Python爬虫库BeautifulSoup的介绍与简单使用实例
BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库,本文为大家介绍下Python爬虫库BeautifulSoup的介绍与简单使用实例其中包括了,BeautifulSoup解析HTML,BeautifulSoup获取内容,BeautifulSoup节点操作,BeautifulSoup获取CSS属性等实例
用户7081581
2020/03/18
2K0
Beautiful Soup库的基本介绍
beautiful soup库是python中用来解析html文件的一个工具,他能做到将html文件依据他的标签的特征来取出相应的标签块,比如取出网页的title啊,body啊,或者是某个id对应的东西啊,等等。从而为进一步的加工处理创造条件。从某种程度上讲是替代了正则的作用,但是比正则表达式使用的更加方便。
mythsman
2022/11/14
3330
04.BeautifulSoup使用
例1: print(type(p.contents)) #list print(p.contents) #可通过索引获取它的某一个元素。
见贤思齊
2020/08/05
2.3K0
04.BeautifulSoup使用
Python爬虫:我这有美味的汤,你喝吗
在前面的文章中已经讲过了正则表达式的使用方法了,但是如果正则表达式出现问题,那么得到的结果就不是我们想要的内容。熟悉前端的朋友肯定知道,对于一个网页来说,都有一定的特殊结构和层级关系,而且很多节点都用id和class来区分。所以可以借助网页的结构和属性来提取数据。
我被狗咬了
2021/01/13
2.5K0
Python爬虫:我这有美味的汤,你喝吗
Python爬虫扩展库BeautifulSoup4用法精要
BeautifulSoup是一个非常优秀的Python扩展库,可以用来从HTML或XML文件中提取我们感兴趣的数据,并且允许指定使用不同的解析器。由于beautifulsoup3已经不再继续维护,因此新的项目中应使用beautifulsoup4,目前最新版本是4.5.0,可以使用pip install beautifulsoup4直接进行安装,安装之后应使用from bs4 import BeautifulSoup导入并使用。下面我们就一起来简单看一下BeautifulSoup4的强大功能,更加详细完整的学
Python小屋屋主
2018/04/16
7780
相关推荐
BeautifulSoup的基本使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档