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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
功能测试与非功能测试
它测试了被测软件的行为。根据客户的需求,称为软件规范或需求规范的文档将用作测试应用程序的指南。
用户7466307
2020/06/16
3.3K0
你需要知道的软件测试类型和常识
原文链接: Types Of Software Testing: Different Testing Types With Details
_sx_
2019/08/07
5.3K0
你需要知道的软件测试类型和常识
软件测试入门,原来这么简单
人非圣贤,孰能无过。每个组织的最终目标都有其自己的一套期望。对于某些企业而言,成功的实际结果与预期结果相匹配的频率很高,这表明了成功。但是,在达到最终目标之前,每个公司都必须面对人为错误的后果。
Sharonyao
2020/10/20
6270
移动测试 关键要点
移动测试 关键要点 设备测试 设备测试通常是为了确保移动设备的质量。 测试包括移动设备的硬件和软件测试。 下面分享讨论不同类型的测试,这些测试通常可以在移动设备上进行的。 单元测试 单元测试是一个测试阶段,当开发人员测试移动设备开发的部分时。 它可能包含硬件测试、软件测试和机械测试。 工厂测试 工厂测试是对移动设备的一种严格检查方式。 它是自动进行的,以验证制造或装配没有任何缺陷。 通常包含以下测试: 移动应用程序测试 硬件测试 电池(充放电)测试 信号接收 网络测试 协议测试 手机游戏测试 手机软件兼容性
苦叶子
2018/04/09
6650
什么是非功能测试?
非功能测试定义为一种软件测试类型,用于检查软件应用程序的非功能性方面(性能,可用性,可靠性等)。它旨在根据非功能参数测试系统的就绪状态,而功能测试永远不会解决这些参数。
归根落叶
2020/05/13
4.4K0
什么是非功能测试?
什么是API测试?如何用 Apifox进行 API 测试?
在互联网时代,API 已成为各类软件系统之间进行交互的重要方式,所以如何进行高质量的 API 测试显得尤为重要。在本文,我们将从 API 测试的概念、重要性开始,详细介绍 API 测试的各种类型,介绍 API 测试各个阶段的具体操作流程,探讨最合适开发使用的 API 测试工具,帮助大家更好地设计和测试 API,从而提高系统质量。
用户11243759
2024/08/14
4290
什么是API测试?如何用 Apifox进行 API 测试?
移动测试 | CheckList
移动测试CheckList 概述 在正式开始分享Appium前,先来一篇关于移动测试CheckList以便大家了解下移动测试要测试什么。 功能测试 功能测试对于任何应用程序来说都是最基本的测试,以确保它按照已定义的需求进行工作。 与其他基于用户界面的应用程序类似,移动应用程序需要在用户场景中进行大量的人工交互。 所以移动测试的用到的方法与我们平时用到的软件测试方法是一致的。 兼容性测试 兼容性测试在移动应用程序测试是为了获取其能兼容的移动平台、设备等指标。 总的来说,移动应用兼容性测试的目的是确保应用程序的
苦叶子
2018/04/09
1.1K0
自动化测试类型
在软件测试领域,有两种测试技术:手动测试和自动化测试。两者都旨在执行测试用例,然后将实际结果与预期结果进行比较。手动测试是一种基础的测试技术,需要大量的人工来确保软件解决方案能够完成它应该做的所有事情。
FunTester
2020/12/24
5620
将QA引入软件开发生命周期是工程师要遵循的最佳实践
为了满足业务需求,思想前卫的公司会将 QA 嵌入到 SDLC 中。这篇文章将带您了解应在每个开发阶段引入哪些 QA 活动。
喵叔
2022/07/12
2850
将QA引入软件开发生命周期是工程师要遵循的最佳实践
2024年最佳软件测试工具40强清单
软件测试工具是指那些支持从计划、需求收集、构建创建、测试执行、缺陷记录到测试分析等各种测试活动的产品。这些工具主要用于检测软件的稳定性、彻底性以及其他性能参数。
wangmcn
2024/04/15
1.5K0
2024年最佳软件测试工具40强清单
12家最佳软件测试服务公司(2024)
软件测试服务是为你提供QA解决方案以测试软件应用程序并获得对软件生产过程的更多控制的组织。它可以帮助你构建市场上具有竞争力的高质量软件程序或应用程序,这些组织通过执行软件测试来确保你的软件为用户提供无摩擦的用户体验。
wangmcn
2024/11/14
2980
12家最佳软件测试服务公司(2024)
API测试| 了解API接口测试| API接口测试指南
API是一个缩写,它代表了一个 pplication P AGC软件覆盖整个房间。API是用于构建软件应用程序的一组例程,协议和工具。API指定一个软件程序应如何与其他软件程序进行交互。
用户7466307
2020/08/17
3.7K0
API测试| 了解API接口测试| API接口测试指南
web自动化测试(1):再谈UI发展史与UI、功能自动化测试
行文前,安利下文章:《图形界面操作系统发展史——计算机界面发展历史回顾》、《再谈MV*(MVVM MVP MVC)模式的设计原理—封装与解耦》
周陆军
2021/07/25
1.8K0
20+最好的开源自动化测试工具
这些开源工具在自动化测试和手动测试、功能、回归、负载、性能、压力和单元测试、web、移动和桌面测试等领域提供相关的能力支持。
苦叶子
2019/05/30
9.3K0
功能测试面试题
在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
找Bug
2022/07/22
4520
如何在DevOps中实施连续测试
在过去的十年中,对软件开发的需求已急剧发展。软件已成为公司获得竞争优势的关键优势,特别是如果您的公司属于SaaS范畴。通过在SDLC中实施瀑布等传统流程,组织现在正在向敏捷过渡,以便以更快的速度在市场上交付软件。为了应对RAD(快速应用程序开发),出现了许多新方法,例如CI / CD,DevOps,Shift左键测试,为了更好地构建,开发和优化软件交付。即便如此,试图同时保持质量和速度仍然是一个真正的挑战,测试方法可以帮助或降低整个加速过程。今天,我们将探讨在DevOps中进行连续测试的重要性。在本文中,将讨论什么是连续测试?还将帮助消除与连续测试有关的错误观点。我们还将探讨DevOps中连续测试所涉及的挑战,以及最佳实践,以帮助您以专业人员的身份执行连续测试过程。
FunTester
2019/12/17
9240
回归测试策略概览
本文要点 回归测试不同于其他类型的测试。 回归测试分为多种类型,因为不同的原因,采取不同的方法。 建立回归测试的策略,重点是要考虑上下文和其他一些因素。 回归测试有很多方式和方法。 不同的方法论需要采用不同的回归测试方法。 成本高、耗时长的回归测试对整个交付团队来说是一个令人烦恼的难题。幸运的是,我们有机会让回归测试变得更轻松、更有效。要做到这一点,应该设计一个有效的回归测试策略,充分满足产品的需求,以最佳的成本保证产品质量。这需要了解回归测试的本质,采用它的原因以及执行它的方法。 为什么要进行回归测试 软
用户1263954
2018/03/20
1.7K0
DevOps 测试实践指南
软件开发公司一直在采用 DevOps,因为它有助于自动化和简化应用程序的开发生命周期。不仅如此,DevOps 还通过规划、沟通、流程和工具,更好地协调了开发团队和运维团队,从而提高了项目的交付质量和速度。但是测试 DevOps 的最佳策略是什么呢?本文将讨论 DevOps 的基本概念、生命周期、最佳实践以及我们应该使用的工具。
深度学习与Python
2022/06/11
4180
DevOps 测试实践指南
系统测试概述
http://mpvideo.qpic.cn/0bf24yaacaaag4advbno6bpfbzwdahtaaaia.f10002.mp4?dis_k=bfdbcf0babf82d9a9cb3bd0
归根落叶
2020/05/15
1.9K0
系统测试概述
相关推荐
功能测试与非功能测试
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档