前往小程序,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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
我的GIS观
从毕业到现在,在GIS这条路上也算是摸爬滚打4、5年了,说长也不长,说短也不短。在这4、5年的时间里,做过遥感应用,做过Arcgis Engine二次开发,做过Arcgis for Android的移动端的开发,也做过web gis的开发,现在在做web GIS开发相关的工作。所以,也可以说,GIS相关的工作基本上都接触过,此处,总结一下自己的观点。
牛老师讲GIS
2018/10/23
1.9K0
GIS数据读取与转换
前面给大家分享了GIS格式总结,今天讲一下GIS数据的读取和转换,主要基于ArcGIS和QGIS这两个用的最广泛的GIS软件平台来讲。
郭好奇同学
2021/05/28
2.9K0
GIS数据读取与转换
GIS专辑 | 数据是GIS的血液
本周将连载关于ArcGIS技术应用的文章。来源于我的师兄。他有丰富的工作经验。如有问题欢迎大家留言或者访问博客进行交流:https://blog.csdn.net/symBBD
郭好奇同学
2020/12/22
5.1K0
GIS专辑 | 数据是GIS的血液
地图服务矢量数据获取方法总结
该方法在《数据福利|三江源保护区、植被、草地矢量》里专门提到了,不过需要注意的是,最多只能获取1000条要素。也可能丢失属性表信息。具体步骤请参阅一位大神Remote Sensing_Dong的CSDN博客《全国三级流域空间分布矢量数据下载方式》,下载kmz格式的数据,可在QGIS中直接打开,并导出SHP矢量格式。
郭好奇同学
2020/11/25
2.8K0
地图服务矢量数据获取方法总结
使用FME获取POI信息
这篇推送,想法来源与群里的朋友。 作为数据处理从业人员,经常需要从互联网上采集一些数据,其中就包括一些POI。有时候数据的需求量不大,又懒得去写代码,就可以用FME来获取这些数据。
数据处理与分析
2019/07/31
1.6K1
使用FME获取POI信息
GIS历史概述与WebGis应用开发技术浅解
声明:本篇在李晓晖的《杂谈WebGIS》,补充更多的资料说明。基于地图二次开发一直断断续续在做,这里算是补充一下基本功把。其实对于前端,WebGis开发都是api,抄demo,改。GIS深入似大海,杂鱼汤来一碗
周陆军
2019/08/11
4K0
python与地理空间分析(一)
在气象数据分析中,地理空间要素是一个必须考虑的关键特征项,也是重要的影响因素。例如气温会随着海拔的升高而降低,地形的坡向朝向也会影响风速的分布,此外,典型的地形会形成特定的气候条件,也是数据挖掘中可以利用的区域划分标准。数据分析中,地理空间分析往往能提供有效的信息,辅助进行决策。随着航空遥感行业的发展,积累的卫星数据也成为了数据挖掘的重要数据来源。 地理空间分析有好多软件可以支持,包括Arcgis,QGIS等软件平台,本系列文章将会着重分享python在地理空间分析的应用。主要包括地理空间数据的介绍,常用的python包,对矢量数据的处理,对栅格数据的处理,以及常用的算法和示例。 地理空间数据包括几十种文件格式和数据库结构,而且还在不断更新和迭代,无法一一列举。本文将讨论一些常用的地理空间数据,对地理空间分析的对象做一个大概的了解。 地理空间数据最重要的组成部分:
MeteoAI
2019/07/24
8.2K0
跟牛老师一起学WEBGIS——WEBGIS基础(地图切片)
瓦片数据是将矢量或影像数据进行预处理,采用高效的缓存机制(如金字塔)形成的缓存图片集,采用“级、行、列”方式进行组织,可在网页中快速加载。因此,瓦片地图加载是根据客户端请求的地图范围和级别,通过计算行列号获取对应级别下网格的瓦片(即服务器预裁剪的图片),由这些瓦片集在客户端形成一张地图。
牛老师讲GIS
2020/08/25
3.7K0
跟牛老师一起学WEBGIS——WEBGIS基础(地图切片)
ArcGIS导入XY数据并定义坐标系与投影
  本文介绍在ArcMap软件中,从Excel表格文件中批量导入坐标点数据,将其保存为.shp矢量格式,并定义坐标系、转为投影坐标系的方法。
疯狂学习GIS
2024/11/21
6710
ArcGIS导入XY数据并定义坐标系与投影
菜鸟的 GIS 基本概念学习
因为一些缘故,工作中了解了一下 GIS。本文算是菜鸟的学习笔记吧,如有错误,衷心希望专业的 GIS 同学指正~
amc
2018/06/23
4.8K0
菜鸟的 GIS 基本概念学习
WebGIS学习资源推荐(包含学习路线、软件和数据资源推荐)
很多人对于WebGIS不是很熟悉,尤其是刚接触WebGIS的开发人员来说,感觉这东西漫无边际,不知道如何下手,所以本篇文章就结合自己的开发和学习经验,给大家推荐一下学习路线和相关的学习资源。
X北辰北
2022/03/15
5.9K0
WebGIS学习资源推荐(包含学习路线、软件和数据资源推荐)
《ArcGIS 地理信息系统教程》概念笔记
之前研究了 GIS,接触到了很多 GIS 的概念。因此找了《 ArcGIS 地理信息系统教程(第 4 版)》来看。书的版本比较老了,不过一些基本概念还是想通的,因为我重点在于 GIS 概念整理,而不是 ArcGIS。
amc
2018/08/23
6.1K0
《ArcGIS 地理信息系统教程》概念笔记
照片to谷歌地球/奥维地图 - 批量导出GPS数据到CSV文件
照片to谷歌地球/奥维地图工具的高级功能之一是可以将照片中的GPS信息批量导出为CSV文件。这个功能特别适合需要分析大量照片地理位置数据的用户,如地理信息系统(GIS)专业人员、摄影师、旅行爱好者等。通过将照片的EXIF数据转换为结构化表格,用户可以轻松进行数据分析、可视化展示和进一步的地理空间处理。
WTSolutions
2025/04/06
1000
Geoserver2.11矢量切片与OL3中的调用展示
GIS的底图一直使用金字塔技术进行切图,使用户能够快速访问指定级别的地图或者影像。但是切图本身是一张图片,无法进行交互。于是又引入了矢量图层用来显示矢量点线面,这通常需要先获取矢量地理数据,然后通过前端将其绘制成不同元素便能通过鼠标进行响应交互了。
牛老师讲GIS
2018/10/23
2K0
Geoserver2.11矢量切片与OL3中的调用展示
GIS前沿技术
无论是初步接触到GIS的学生,还是对GIS已经有一定的了解的从业者,肯定都非常关心两个问题:GIS有没有发展前景,GIS有哪些应用价值?
charlee44
2024/12/14
3080
GIS前沿技术
python与地理空间分析(3)shp文件操作
在python与地理空间分析(1)与(2)中我们介绍了GIS中常用的数据类型、python在处理地理空间数据时用到的包以及给定经纬度计算空间距离的算法,本期我们主要介绍对地理空间分析中常用到的矢量数据shp文件的处理,在捍卫祖国领土从每一张地图开始我们也提供较为精准的包括南海九段线的中国地图,大家可以自行下载。
MeteoAI
2019/08/19
15.4K1
python与地理空间分析(3)shp文件操作
在Excel中处理和使用地理空间数据(如POI数据)
因为不是所有规划相关人员,都熟悉GIS软件,或者有必要熟悉GIS软件,所以可能我们得寻求另一种方法,去简单地、快速地处理和使用地理空间数据——所幸,我们可以通过Excel自带的“三维地图”功能来简单满足一些差不多够用的需求。
Sidchen
2020/08/02
11.6K0
HT全矢量化的图形组件设计
HT for Web
2018/01/03
1.5K0
HT全矢量化的图形组件设计
关于GIS数据分类方式
GIS数据有很多种分类方式,按照数据结构可分为矢量数据、栅格数据、DEM数据,还可以再细致的分为数据库格式、点云格式、3D格式,也可以按照各厂家和标准类别来分等等。
python与大数据分析
2023/10/06
1.1K0
关于GIS数据分类方式
公交线路数据获取脚本分享
公交、地铁线路数据,可以用于交通运输、公共服务水平分析等各个领域,是规划相关工作中较为常用的数据。
Sidchen
2020/08/02
2.5K2
相关推荐
我的GIS观
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档