专栏首页编程学习园地PHP Laravel 上传图片、文件等类封装

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

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

具体代码如下:

<?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 上传图片、文件等类封装,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

/

/

原文链接:https://www.blog.zirun.me/php/4653.html

我来说两句

0 条评论
登录 后参与评论

相关文章

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

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

    用户2323866
  • PHP 之文件上传类封装

    爱知汇
  • 3分钟短文:用Laravel的方式管理服务器的文件们

    如果我们的应用程序接收用户提交的许多静态文件,文档,图片等等,需要将其上传到服务器并进行有效地管理。

    程序员小助手
  • Laravel5.8开发环境搭建与CRUD应用实践

    在这个面向初学者的教程中,我们将学习如何使用最新的PHP开发框架Laravel 5.8,来创建一个基于MySQL数据库的Web应用,实现联系人的增删改查功能。

    用户1408045
  • Laravel框架关键技术解析

    1.index.php:自动加载函数的添加、服务容器实例化与服务注册、路由加载、请求实例化与路由分发、响应生成与发送

    硬核项目经理
  • php系列二之phpstorm Xdebug和laravel常见问题整理

    因为 php artisan migrate:make 是 Laravel 4 的语法,而 Laravel5 已经换成了 php artisan make:mi...

    开发架构二三事
  • 基于 Redis 消息队列实现文件上传的异步存储

    本来准备给 Redis 实战入门篇做个收尾了,不过想起来 Laravel 进阶组件部分还剩下文件存储、邮件和通知这几个功能没有介绍,不如索性一并介绍下,因为它们...

    学院君
  • 创建并运行一个新的 Laravel 项目

    经过 PHP 入门到实战系列的基础学习,接下来我们就可以正式开始 Laravel 框架的学习和使用了。而这一切都需要从创建一个新的 Laravel 项目开始。

    学院君
  • PHP实现文件上传操作和封装

    本文实例为大家分享了PHP实现文件上传操作和封装的具体代码,供大家参考,具体内容如下

    砸漏
  • Laravel 7 新特性-组件以及插槽的简单用法

    其实组件 和 布局 layout 有点儿类似,我们可以抽离相同的代码块,封装成一个组件。以前我们是封装成多个 layout 来进行布局。这个功能和 Vue 极度...

    hedeqiang
  • Laravel框架下载,安装及路由操作图文详解

    本文实例讲述了Laravel框架下载,安装及路由操作。分享给大家供大家参考,具体如下:

    砸漏
  • Laravel 队列使用的实现

    Laravel是一种类似ThinkPHP的php框架,封装的诸多功能可以很方便的使用。队列Queue便是其中之一。

    砸漏
  • Laravel中基于XunSearch的中文搜索解决方案

    分词搜索始终不是那么好解决,但是基本也有现成的解决方案。在我博客之前的文章我也介绍过Sphinx分词搜索:CentOS7下安装Sphinx 中文分词【PHP+M...

    无道
  • PHP丨实现可判断类型限制大小的原生文件上传,图片上传等

    V站CEO-西顾
  • 除了PHP还应该学什么?

    PHP 语言之所以能有今天的地位,得益于PHP语言设计者一直遵从实用主义,将技术的复杂性隐藏在底层。PHP 语言入门简单,容易掌握,程序健壮性好,不容易出现像 ...

    叫我可儿呀
  • PHP如何上传文件和下载,你学会了吗?

    ​ 在 B/S 程序中文件上传已经成为一个常用功能。其目的是客户可以通过浏览器(Browser)将文件上传到服务器(Server)上的指定目录。

    叫我可儿呀
  • Laravel Jetstream是什么以及如何入门?

    Laravel Jetstream 与 Laravel 8 一起于2020年9月8日发布。

    Lemon黄
  • 3分钟短文:Laravel是怎么发出一封电子邮件的?

    上一章我们为发电子邮件准备了贴心的表单,完善的数据验证,那么本篇我们讲解如何在laravel内发送一封电子邮件。

    程序员小助手
  • 【腾讯云的1001种玩法】 Laravel 整合万向优图图片管理能力,打造高效图片处理服务

    万象优图是腾讯云旗下的图片处理服务,能够帮助用户快速构建一个方便、快捷、处理性能强的图片处理服务,借助 万象优图 For Laravel 插件,我们可以轻松的在...

    白宦成

扫码关注云+社区

领取腾讯云代金券