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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Chrome 116:网页画中画 API 来了!
Chrome 116 刚刚发布了正式版本,其中比较值得关注的新增功能就是网页的画中画 API 了(Document Picture in Picture API )。
ConardLi
2023/08/23
8470
Chrome 116:网页画中画 API 来了!
浏览器画中画模式
浏览器画中画模式 浏览器画中画功能允许用户在一个小的叠加窗口中弹出网页中播放的视频 ?,Chrome 版本大于 71 均默认开启该功能。下面简单介绍一下该 API 如何使用 ? 准备工作 首先要有个
JS菌
2019/04/10
3.4K0
浏览器画中画模式
人生想要开挂,快来学习“画中画”!
首先请允许我介绍下“画中画”:画中画(英文Picture-in-picture,缩写PiP)是指将一个电视节目(或其他画面)显示在整个画面上,同时将另一个或多个其他画面显示在角落中,通常只播放主窗口的声音 —— from wiki
腾讯IVWEB团队
2020/06/28
1.8K0
从零开发弹幕视频播放器
这是一个系列文章。本文章将介绍,如何制作一个简单的视频播放器。用少量关键的代码来实现视频播放器核心功能。
羽月
2022/10/09
4.4K0
从零开发弹幕视频播放器
Web Speech API 之 Speech Synthesis
Speech synthesis(语音合成,也被称作是文本转为语音,英语简写是 TTS)包括接收 app 中需要语音合成的文本,再在设备扬声器或音频输出连接中播放出来这两个过程。
AlphaHinex
2024/07/04
4820
Web Speech API 之 Speech Synthesis
怎么用 JavaScript 构建自定义的 HTML5 视频播放器
在网页中观看和分享视频内容是一个很常见的功能,多年来,视频嵌入网页的方式发生了变化。现在,我们在现代浏览器中使用 <video> 标签就可以添加视频文件到网页上,该标签支持多个视频格式。
Jimmy_is_jimmy
2023/03/09
11.6K0
怎么用 JavaScript 构建自定义的 HTML5 视频播放器
基于Vue.js2.6结合h5来实现视频播放画中画技术(Picture-in-Picture)
    在开发基于vue.js的在线视频教育平台的时候,我们会注意一个小问题,就是如果用户在观看播放视频的同时,也会往下拖动窗口浏览一些评论,这样视频就会被滚动条覆盖,导致用户无法在浏览评论的同时观看视频,同理,如果想边刷微博边追剧怎么办?想边聊微信边看球赛怎么办?
用户9127725
2022/08/08
1.2K0
基于Vue.js2.6结合h5来实现视频播放画中画技术(Picture-in-Picture)
canvas视频截帧
Promise博客:https://vampireachao.gitee.io/2021/12/04/Promise/
阿超
2022/09/28
6410
canvas视频截帧
记录一些在此之前不知道的Web API
Web API:https://developer.mozilla.org/zh-CN/docs/Web/API
房东的狗丶
2023/02/17
4510
【Web APIs】JavaScript 事件基础 ① ( JavaScript 事件简介 | “ 事件 “ 概念 | “ 事件 “ 三要素 - 事件源 / 事件 / 事件处理程序 | 事件类型 )
通过在 HTML 网页中 添加 JavaScript 脚本 , 可以创建 动态页面 ,
韩曙亮
2024/06/24
2570
【Web APIs】JavaScript 事件基础 ① ( JavaScript 事件简介 | “ 事件 “ 概念 | “ 事件 “ 三要素 - 事件源 / 事件 / 事件处理程序 | 事件类型 )
多媒体编程
由于要实现图片翻转,需要较高的响应度,此时需要进行缓存,new一个Image对象创建一个HTMLImageElement对象实例
mySoul
2018/10/08
1.4K0
Android开发笔记(一百六十七)Android8.0的画中画模式
前面的博文《Android开发笔记(一百五十九)Android7.0的分屏模式》介绍了Android7.0的多窗口特性,但是这个分屏的区域是固定的,要么在屏幕的上半部分,要么在屏幕的下半部分,不但尺寸无法调整而且还不能拖动,使得它的用户体验不够完美。为此Android8.0又带了另一种更高级的多窗口模式,号称“Picture in Picture”(简称PIP,即“画中画”)。应用一旦进入画中画模式,就会缩小为屏幕上的一个小窗口,该窗口可拖动可调整大小,非常适合用来播放视频。那么如何才能让App支持画中画呢?接下来将对画中画的开发工作进行详细介绍。 经过前面的学习,大家知道Activity默认是支持分屏模式的,当然开发者要给activity节点添加下面的属性描述,从而声明允许分屏也是可以的:
aqi00
2019/01/18
2.5K0
[UWP]用画中画模式(CompactOverlay Mode)让用总在最前端显示
Windows 10 Creators Update以后UWP提供了一个新的视图模式CompactOverlay,中文翻译成 紧凑的覆盖层?反正大部分时间我们都会称它为画中画模式。
dino.c
2020/02/13
1.4K0
【Web APIs】DOM 文档对象模型 ④ ( querySelector 函数 | querySelectorAll 函数 | NodeList 对象 )
在之前的博客中 , 都是通过 ID、 标签名、类名 获取 HTML 网页中的 DOM 元素 , 分别使用
韩曙亮
2024/06/24
2570
【Web APIs】DOM 文档对象模型 ④ ( querySelector 函数 | querySelectorAll 函数 | NodeList 对象 )
【Web APIs】DOM 文档对象模型 ⑤ ( 获取特殊元素 | 获取 html 元素 | 获取 body 元素 )
通过 JavaScript 和 DOM 操作 可以获取上述两个 html 和 body 特殊标签 元素 ;
韩曙亮
2024/06/24
3690
【Web APIs】DOM 文档对象模型 ⑤ ( 获取特殊元素 | 获取 html 元素 | 获取 body 元素 )
腾讯云音视频播放器又上新啦!短视频秒开组件、加密画中画等功能让音视频播放更专业!
根据腾讯云音视频官方的消息显示,播放器SDK是音视频终端SDK的子产品之一,它采用“腾讯视频”同款播放内核,经过内部业务长期优化和海量服务验证,对比系统播放器性能可提升20%-50%,同时具备“臻彩视听”、精准Seek、画中画等丰富功能,为用户提供直播、点播场景下流畅稳定的音视频播放能力,覆盖泛娱乐、电商、教育等多样化音视频业务场景,支持Web/H5、iOS、Android、Flutter平台。
三掌柜
2023/12/29
9234
腾讯云音视频播放器又上新啦!短视频秒开组件、加密画中画等功能让音视频播放更专业!
js让光标选择节点中部分文本
Range的MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/Range/setStart
阿超
2022/08/21
2.9K0
js让光标选择节点中部分文本
【Web APIs】DOM 文档对象模型 ③ ( 根据类名获取 DOM 元素 - getElementsByClassName 函数 | 代码示例 )
根据类名获取 DOM 元素 , 需要 使用 HTML5 新增的方法 , Document.getElementsByClassName 函数获取 ;
韩曙亮
2024/06/21
2210
【Web APIs】DOM 文档对象模型 ③ ( 根据类名获取 DOM 元素 - getElementsByClassName 函数 | 代码示例 )
前端音视频WebRTC实时通讯的核心
通过上两个系列专栏的学习,我们对前端音视频及 WebRTC 有了初步的了解,是时候敲代码实现一个 Demo 来真实感受下 WebRTC 实时通讯的魅力了。还没有看过的同学请移步:
童欧巴
2020/11/02
2.7K0
前端音视频WebRTC实时通讯的核心
# 学会这些 Web API 使你的开发效率翻倍
随着浏览器的日益壮大,浏览器自带的功能也随着增多,在 Web 开发过程中,我们经常会使用一些 Web API 增加我们的开发效率。
九旬
2023/10/19
5030
推荐阅读
相关推荐
Chrome 116:网页画中画 API 来了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档