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

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

作者头像
用户8449980
修改于 2021-07-13 02:30:10
修改于 2021-07-13 02:30:10
2.3K0
举报
文章被收录于专栏:编程学习园地编程学习园地

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

具体代码如下:

<?php

/**

namespace AppThinkClass;

use SymfonyComponentHttpFoundationFileUploadedFile;

class UploadClass

{

/**

protected $file;

/**

private $error = ''; //上传错误信息

private $fullPath='';//绝对地址

private $config = array(

'maxSize' => 3

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-&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]);

}

/**

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;

}

/**

protected function checkRootPath($rootpath){

if(!(is_dir($rootpath) &amp;&amp; is_writable($rootpath))){

$this->error = '上传根目录不存在!';

return false;

}

return true;

}

/**

public function checkSavePath($savepath){

/

/

if (!$this-&gt;mkdir($savepath )) {

return false;

} else {

/

/

if (!is_writable($savepath)) {

$this->error = '上传目录不可写!';

return false;

} else {

return true;

}

}

}

/**

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;

}

/**

private function checkSize($size) {

return !($size &gt; $this->maxSize) || (0 == $this->maxSize);

}

/**

private function checkExt($ext) {

return emptyempty($this-&gt;config['exts']) &#63; true : in_array(strtolower($ext), $this->exts);

}

/**

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=5

1024;

$upload->savePath='course/uid_6';

$file = $request->file('fileImg');

$aa = $upload->upload($file);

dd($aa);

以上所述是小编给大家介绍的PHP Laravel 上传图片、文件等类封装,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

/

/

本文系转载,前往查看

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

本文系转载,前往查看

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

评论
登录后参与评论
暂无评论
推荐阅读
【Java篇】静动交融,内外有别:从静态方法到内部类的深度解析
static(静态)是 Java 中的一个关键字,主要用于修饰类中的变量或方法。被 static 修饰的成员属于 类本身 而非某个实例对象。它在编译阶段就会被加载到方法区中(Java 8 之后元空间/Metaspace),无需通过创建对象就能访问。其生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)
半截诗
2025/03/24
1650
【14】JAVASE-面向对象-内部类【从零开始学JAVA】
Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。
用户4919348
2024/05/25
780
【14】JAVASE-面向对象-内部类【从零开始学JAVA】
Java内部类
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/52388689
DannyHoo
2018/09/13
4280
静态内部类和内部类的区别_内部类不能定义为抽象类
参考静态内部类和非静态内部类的区别中提到的 正常情况下,你不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分,因为它是static 的。只是将嵌套类置于接口的命名空间内,这并不违反接口的规则,我试验了一下 ,无论是静态类还是非静态类都可以写在接口里。
全栈程序员站长
2022/11/10
3920
静态内部类和内部类的区别_内部类不能定义为抽象类
Java基础——package+权限修饰符+内部类
编译:在D盘下有Person_Test.java ,在D盘下打开dos命令行执行 javac -d . Person_Test.java 命令就会生成一个D:/com/heima/Person_Test.class
阿Q说代码
2021/05/13
2870
Java基础——package+权限修饰符+内部类
如何讲清楚 Java 面向对象的问题与知识?(类与对象,封装,继承,多态,接口,内部类...)
这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解。所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项目,专注 Java 后端面试题 + 解析 + 重点知识详解 + 精选文章的开源项目,希望它能伴随你我一直进步!
BWH_Steven
2021/02/24
1.2K0
如何讲清楚 Java 面向对象的问题与知识?(类与对象,封装,继承,多态,接口,内部类...)
几行代码带你彻底搞懂Java内部类
内部类 基本概述 --- 当一个类的定义放在另一个类的实体时,则该类叫做内部类,该类所在的类叫做外部类 在一个类体中可以出现的内容:成员变量、成员方法、构造方法、构造块、静态语句块、静态变量、方法、内部类 嵌套类 - 内部类(成员内部类、局部内部类、匿名内部类) - 静态嵌套类 语法格式 class 外部类类名{ class 内部类类名{ 内部类类体; } } 成员内部类 --- 成员内部类定义在另一个类或接口中的内部类 注意事项 - 必须先创建外部类对象才能创建成员内部类对象 -
ruochen
2021/05/15
6190
几行代码带你彻底搞懂Java内部类
Java学习【抽象类和接口】
抽象类是一种不能被实例化的类,其中至少包含一个抽象方法(即没有实现体的方法)。抽象类通常用于定义一组相关的类的共同特征,并强制其子类实现特定的方法。
2的n次方
2024/10/15
620
Java学习【抽象类和接口】
第十三天 面向对象-final static 匿名对象内部类包代码块【悟空教程】
第13天 面向对象 第1章 面向对象其他知识点 1.1 final与static关键字 1.1.1 final关键字 1.1.1.1 final概念 继承的出现提高了代码的复用性,并方便开发。但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写。可是当子类继承了这些特殊类之后,就可以对其中的方法进行重写,那怎么解决呢? 要解决上述的这些问题,需要使用到一个关键字final,final的意思为最终,不可变。final是个修饰符,它可以用来修饰类,类的成员,以及局
Java帮帮
2018/06/11
4160
内部类的简单理解
我们知道,在java中类是单继承的,一个类只能继承另一个具体类或抽象类(可以实现多个接口)。这种设计的目的是因为在多继承中,当多个父类中有重复的属性或者方法时,子类的调用结果会含糊不清,因此用了单继承。
zhangjiqun
2024/12/16
820
java_内部类、匿名内部类的使用
创建内部类对象格式: 外部类名.内部类名 对象名 = new 外部类型().new 内部类型();
咕咕星
2020/08/19
7070
java基础第九篇之final和内部类等
* 特点1.在同一个类中 静态代码块是优先于构造方法执行,静态代码块优先于main方法
海仔
2019/08/05
4580
基础篇:JAVA内部类的使用介绍
1 四种内部类 成员内部类 静态内部类 局部内部类 匿名内部类 2 内部类的使用场景和优点 内部类的优点:每个内部类都能独立地继承一个类(实现多个接口),无论外部类是否已经继承或者实现,对于内部类都没有影响。内部类的存在使得Java的多继承机制变得更加完善 在开发设计中会存在一些使用接口很难解决的问题,而类却只能继承一个父类。这个时候可以利用内部类去继承其他父类,及implements多个接口能力来解决。内部类使得多重继承的解决方案变得更加完整 public class HashMap<K,V> exten
潜行前行
2020/12/11
5330
基础篇:JAVA内部类的使用介绍
Java内部类复习笔记
什么是Java内部类? 在类内部可定义成员变量和方法,且在类内部也可以定义另一个类。如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Out
框架师
2021/03/05
6340
Java基础8:深入理解内部类
https://h2pl.github.io/2018/04/25/javase8
程序员黄小斜
2019/04/06
1.6K0
Java学习笔记之内部类 & API
    在一个类中定义一个类,举例:在一个类A的内部定义一个类B,类B就被称为内部类
Jetpropelledsnake21
2021/12/01
3470
Java学习笔记之内部类 & API
Java基础(十一):抽象类、接口、内部类
选择保留其中一个,通过“接口名.super.方法名"的方法选择保留哪个接口的默认方法
冬天vs不冷
2025/01/21
3100
Java基础(十一):抽象类、接口、内部类
java之内部类
成员内部类的优点: ⑴ 内部类作为外部类的成员,可以访问外部类的私有成员或属性。(即使将外部类声明为PRIVATE,但是对于处于其内部的内部类还是可见的。) ⑵ 用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。
猫头虎
2024/04/07
1320
10(02)总结形式参数,包,修饰符,内部类
6:内部类(理解) (1)把类定义在另一个类的内部,该类就被称为内部类。 举例:把类B定义在类A中,类B就被称为内部类。 (2)内部类的访问规则 A:可以直接访问外部类的成员,包括私有 B:外部类要想访问内部类成员,必须创建对象 /* 内部类概述: 把类定义在其他类的内部,这个类就被称为内部类。 举例:在类A中定义了一个类B,类B就是内部类。 内部的访问特点: A:内部类可以直接访问外部类的成员,包括私有。 B:外部类要访问内部类的成员,必须创建对象。 */ class Outer {
Java帮帮
2018/03/15
6020
【抬抬小手学Python】 内部类
关于内部类的部分内容,正在深入了解中。 每天都在修改更新中。 一、成员内部类 /** * 需要知道两个前提: * 1.成员内部类是外围类的一个成员,它两关系特别好,推心置腹,抵足而眠,都是最好
查理不是猹
2022/01/07
4910
推荐阅读
相关推荐
【Java篇】静动交融,内外有别:从静态方法到内部类的深度解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档