封装ThinkPHP6.0通用文件上传

本文实例讲述了封装thinkphp6通用文件上传方法,上传功能使用的是layui的upload组件。

封装ThinkPHP6.0通用文件上传教程

一、打开项目在config文件夹下创建upload.php配置文件用来管理文件上传的后缀和大小

  [        //允许图片上传的后缀        'image'     =>  'jpg,jpeg,png,gif',        //允许上传文件的后缀        'file'      =>  'zip,gz,doc,txt,pdf,xls',        //...    ],    //定义允许上传文件大小的数组    'size_arr'      =>  [        //允许图片上传的大小        'image'     =>  10,        //允许文件上传的大小        'file'      =>  50    ],];

二、修改configilesystem.php配置文件配置上传根目录及上传规则

 env('filesystem.driver', 'local'),    // 磁盘列表    'disks'   => [        'local'  => [            'type' => 'local',            'root' => app()->getRuntimePath() . 'storage',        ],        'public' => [            // 磁盘类型            'type'       => 'local',            // 磁盘路径            'root'       => app()->getRootPath() . 'public/uploads',            // 磁盘路径对应的外部URL路径            'url'        => '/uploads',            // 可见性            'visibility' => 'public',        ],        // 更多的磁盘配置信息    ],];

三、 在appcontroller目录下创建Upload.php类并编写upload()文件上传方法

isPost()){            //接收文件上传类型            $type = request()->param('type','','trim');            $name = request()->param('name','','trim');            //获取表单上传文件            $file = request()->file('file');            //组装文件保存目录            $upload_dir = '/'.$type.'/'.$name;            try {                //从config/upload.php配置文件中读取允许上传的文件后缀和大小                $suffix_config = config('upload.suffix_arr');                $size_config = config('upload.size_arr');                if (empty($size_config[$type]) || empty($size_config[$type])){                    return false;                }else{                    $suffix = $suffix_config[$type];                    $size = $size_config[$type];                }                //验证器验证上传的文件                validate(['file'=>[                    //限制文件大小                    'fileSize'      =>  $size * 1024 * 1024,                    //限制文件后缀                    'fileExt'       =>  $suffix                ]],[                    'file.fileSize' =>  '上传的文件大小不能超过'.$size.'M',                    'file.fileExt'  =>  '请上传后缀为:'.$suffix.'的文件'                ])->check(['file'=>$file]);                //上传文件到本地服务器                $filename = hinkacadeFilesystem::disk('public')->putFile($upload_dir, $file);                if ($filename){                    $src = '/uploads/'.$filename;                    return json(['code'=>1,'result'=>$src]);                }else{                    return json(['code'=>0,'msg'=>'上传失败']);                }            }catch (ValidateException $e){                return json(['code'=>0,'msg'=>$e->getMessage()]);            }        }else{            return json(['code'=>0,'msg'=>'非法请求']);        }    }}

四、 打开appcontrollerIndex.php类并修改index方法

立即学习“PHP免费学习笔记(深入)”;

<?phpnamespace appcontroller;use appBaseController;class Index extends BaseController{    public function index()    {        //渲染前端页面        return view();    }}

五、在appiewindex目录下创建index.html文件

        文件上传                    #avatar_thumb {            position: absolute;            left: 50%;top: 50%;            width: 168px;            height: 168px;            margin: -50px 0 0 -84px;            border-radius: 100%;        }    
封装ThinkPHP6.0通用文件上传
layui.use(['form', 'upload'], function() { var upload = layui.upload; //图片上传 common_upload('avatar'); //文件上传 //common_upload('avatar','file'); });

六、在publicstaticlibjs目录下创建common.js

/** * @desc 通用文件上传 * @param name  文件存储文件夹 * @param type 文件类型:默认为图片类型(image) */function common_upload(name,type='image') {    layui.use(['form', 'upload'], function() {        var upload = layui.upload;        //选完文件后自动上传        upload.render({            elem: '#'+name,            url: "/upload/upload",            auto: true,            accept: 'file', //普通文件            data:{name:name,type:type},                        done: function(data) {                console.log(data);                //上传完毕回调                if (data.code == 0) {                    return layer.msg(data.msg,{icon:2});                } else {                    $("#"+name+"_thumb").attr('src',data.result).show();                    $('input[name='+name+']').val(data.result);                }            }        });    });}

七、测试图片上传

7.1、为了方便,本文就不在本地部署项目了,采用ThinkPHP内置的服务器

进到项目根目录,执行以下命令:

php think run

run.png

7.2、在浏览器地址栏中输入访问地址,发现报错?

bc.png

7.3、遇到错误不要慌,我们打开ThinkPHP的调试功能,看看具体错误信息

企业WAP2.0网站管理系统1.0 企业WAP2.0网站管理系统1.0

系统安装步骤   1、安装QuickWAP组件。将QuickWAP.dll拷贝到System32文件夹下,在开始菜单运行 regsvr32 QuickWAP.dll 即可。   2、将“WAP2.0企业系统源码”目录下的文件通过FTP传到服务器上,或在本机IIS上调试,然后通过域名或IP访问。 简介:   新版企业WAP2.0手机网站采用QuickWAP X

企业WAP2.0网站管理系统1.0 0 查看详情 企业WAP2.0网站管理系统1.0

debug.png

7.4、通过开启调试模式,发现报错原因是我们没有安装模板引擎,在ThinkPHP6.0中默认只能支持PHP原生模板,如果需要使用thinkTemplate模板引擎,需要安装think-view扩展

view.png

7.5、进到项目根目录下,输入以下命令进行安装think-view模板

composer require topthink/think-view

7.6、再次访问,访问成功。不过图片显示的是破裂的,如果觉得不好看,小伙伴们可以自行设置一个默认图片。

msg.png

7.7、测试图片上传。从GIF图中可以看出上传图片大小和后缀不符合配置文件中设置的值,会给出相应的提示信息,只有上传符合配置文件中设置的值的图片才会在页面中显示并存储到本地。

上传演示图-投稿使用.gif

7.8、如果需要上传文件,视频或音频,只需要修改以下两个地方,这里就不演示了,小伙伴们下去自己试下。

QQ截图20200504112839.png

八、新图片上传成功后自动删除原图,有效地减少垃圾信息的累积

8.1、在appcontrollerUpload.php中添加delImg() 方法

isPost()){            //接收文件上传类型            $type = request()->param('type','','trim');            $name = request()->param('name','','trim');            //获取表单上传文件            $file = request()->file('file');            //组装文件保存目录            $upload_dir = '/'.$type.'/'.$name;            try {                //从config/upload.php配置文件中读取允许上传的文件后缀和大小                $suffix_config = config('upload.suffix_arr');                $size_config = config('upload.size_arr');                if (empty($size_config[$type]) || empty($size_config[$type])){                    return false;                }else{                    $suffix = $suffix_config[$type];                    $size = $size_config[$type];                }                //验证器验证上传的文件                validate(['file'=>[                    //限制文件大小                    'fileSize'      =>  $size * 1024 * 1024,                    //限制文件后缀                    'fileExt'       =>  $suffix                ]],[                    'file.fileSize' =>  '上传的文件大小不能超过'.$size.'M',                    'file.fileExt'  =>  '请上传后缀为:'.$suffix.'的文件'                ])->check(['file'=>$file]);                //上传文件到本地服务器                $filename = hinkacadeFilesystem::disk('public')->putFile($upload_dir, $file);                if ($filename){                    $src = '/uploads/'.$filename;                    return json(['code'=>1,'result'=>$src]);                }else{                    return json(['code'=>0,'msg'=>'上传失败']);                }            }catch (ValidateException $e){                return json(['code'=>0,'msg'=>$e->getMessage()]);            }        }else{            return json(['code'=>0,'msg'=>'非法请求']);        }    }    //删除旧图片    public function delImg()    {        if (request()->isPost() && request()->isAjax()){            //获取旧图片地址            $img_url = input('img_url','','trim');            //如果旧图片地址为系统默认图片地址直接返回true; 这里的系统默认地址小伙伴可以自行设置            if($img_url == '/uploads/image/avatar/default/user_avatar.jpg'){                return true;            }            //ROOT_PATH常量建议定义在入口文件index.php或中间件中,这里为了演示方便就先定义在这里。            define('ROOT_PATH',dirname(str_replace("",'/',$_SERVER['SCRIPT_FILENAME']))."/");            //如果接收的图片地址不为空,循环删除            if (!empty($img_url)){                $old_image = array(ROOT_PATH.$img_url);                foreach ($old_image as $img){                    if (file_exists($img)){                        @unlink($img);                    }                }            }            return json(['code'=>1,'msg'=>'图片删除成功']);        }else{            return json(['code'=>0,'msg'=>'图片删除失败']);        }    }}

8.2、在common.js中的common_upload()方法中定义before()

/** * @desc 通用文件上传 * @param name  文件存储文件夹 * @param type 文件类型:默认为图片类型(image) */function common_upload(name,type='image') {    layui.use(['form', 'upload'], function() {        var upload = layui.upload;        //选完文件后自动上传        upload.render({            elem: '#'+name,            url: "/upload/upload",            auto: true,            accept: 'file', //普通文件            data:{name:name,type:type},            before: function(obj) {                var img_url = $('input[name='+name+']').val();                // 删除老数据                if (img_url != '') {                    $.ajax({                        url: "/upload/delImg",                        type: 'POST',                        data: {                            img_url: img_url                        },                    });                }            },            done: function(data) {                console.log(data);                //上传完毕回调                if (data.code == 0) {                    return layer.msg(data.msg,{icon:2});                } else {                    $("#"+name+"_thumb").attr('src',data.result).show();                    $('input[name='+name+']').val(data.result);                }            }        });    });}

相关推荐:1. thinkphp技术专题2. thinkphp视频教程

以上就是封装ThinkPHP6.0通用文件上传的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/859383.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Windows 11怎么让Windows管理默认打印机_Windows 11自动切换上次使用的打印机
上一篇 2025年11月27日 22:03:06
芒果TV电脑端登录入口 芒果TV官网PC版入口
下一篇 2025年11月27日 22:03:09

相关推荐

  • ThinkPHP6发送推送通知:实现用户消息推送

    ThinkPHP6发送推送通知:实现用户消息推送 引言:在现代的Web应用程序中,消息推送已成为提供实时通知和即时更新的重要功能之一。用户在操作过程中会收到及时的消息提醒,提升用户体验和交互性。本文将介绍如何在ThinkPHP6框架中实现用户消息推送功能,并附带代码示例。 一、准备工作 确保已经安装…

    2026年9月21日
    000
  • 俄罗斯Яндекс账号登录入口 Yandex电脑版官方网站登录

    答案是https://www.yandex.com/。该网站提供搜索、地图、新闻、翻译等服务,界面简洁,支持个性化设置与账户同步,并拥有邮箱、云存储及丰富的应用生态。 1、立即进入“☞☞☞☞点击俄罗斯yandex搜索引擎入口☜☜☜☜”; 2、立即进入“☞☞☞☞点击快速获取Yandex免登录官网链接☜…

    2026年9月21日
    000
  • Xdebug性能优化:解决PHP调试器导致页面加载缓慢或超时的问题

    当Xdebug配置不当,即使未主动调试,也可能导致PHP应用页面加载缓慢或超时。本文将深入探讨Xdebug的工作原理,指导如何通过正确配置xdebug.mode、排查多配置文件冲突,并利用Xdebug日志进行诊断,从而有效解决调试器造成的性能瓶颈,确保开发环境的流畅运行。 理解Xdebug的连接机制…

    2026年9月21日
    000
  • Microsoft Teams如何使用快捷键 Microsoft Teams操作效率的提升秘籍

    答案:掌握Microsoft Teams快捷键可提升操作效率。依次介绍聊天窗口、视图切换、通话控制、静音、摄像头、屏幕共享、快速参会、结束会议、消息状态、搜索、换行、命令面板、自定义设置、Tab导航、表情符号及字体调整等快捷操作。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用…

    2026年9月21日
    000
  • 谷歌浏览器官方主站入口 最新Chrome在线登录页面

    谷歌浏览器官方主站入口是https://www.google.com,该页面具备界面简洁、操作流畅、集成化服务入口和个性化推荐等特点,支持多设备访问且无广告干扰。 谷歌浏览器官方主站入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来谷歌浏览器最新Chrome在线登录页面相关信息,感兴趣的…

    2026年9月21日
    000
  • MySQL 大型历史数据表结构设计与优化指南

    本文旨在为处理大量客户历史交易数据的MySQL数据库设计提供专业指导。我们将探讨如何构建高效、可扩展的表结构,重点关注主键设计、数据分区、实时数据摄入以及性能优化策略,以确保系统能够稳定支持百万级乃至亿级数据量的查询需求。 MySQL大型历史数据表结构设计与优化 在处理大量历史数据,特别是涉及到多用…

    2026年9月21日
    000
  • Xdebug配置与故障排除:解决PHP调试连接导致的网页超时问题

    本文旨在解决Xdebug在IDE未监听调试连接时可能导致的网页加载缓慢或超时问题。我们将深入探讨Xdebug的工作原理、关键配置参数,并提供一套系统的故障排除方法,包括如何启用详细日志记录以及检查多重配置文件的影响,以确保Xdebug仅在需要时激活,避免不必要的性能开销。 1. 理解Xdebug的工…

    2026年9月21日
    100
  • PHP面向对象编程:解决父类构造器传递值在子对象方法中为空的问题

    本文探讨了PHP中一个常见的面向对象编程问题:当父类构造器接收并初始化一个子对象时,如何确保该子对象内部的方法能正确访问到父类传递的值,避免出现null。文章将通过示例代码,详细介绍两种核心解决方案:通过控制器提供内部对象的访问器(Getter),以及采用依赖注入(Dependency Inject…

    2026年9月21日
    400
  • 构建与调试PHP简易路由系统:从原理到实践

    本文将指导您如何从零开始构建一个基础的PHP路由系统,实现URL到控制器和方法的映射。我们将深入探讨$_SERVER[‘REQUEST_URI’]的解析、控制器文件的动态加载、方法调用以及如何通过.htaccess进行URL重写。同时,文章还将详细讲解常见的“未定义变量”错误…

    2026年9月21日
    200
  • Linux中如何安装Redis_Linux安装Redis服务的完整教程

    安装编译环境和依赖:Ubuntu/Debian用apt安装build-essential tcl wget,CentOS/RHEL用yum安装Development Tools和tcl wget。2. 下载Redis 7.2.4源码包并%ignore_a_1%,进入目录后执行make编译,可选mak…

    2026年9月21日
    000
  • PHP框架中间件有什么用处_PHP框架中间件设计与实现

    PHP框架中间件是处理请求和响应的过滤器,用于实现身份验证、日志记录、CORS等通用逻辑,核心价值在于解耦和提升可维护性。通过定义中间件接口、具体中间件类及管道调度器可实现自定义中间件,如身份验证或CORS处理。在Laravel中可通过Kernel.php配置全局、分组或路由级中间件,执行顺序按注册…

    2026年9月21日
    100
  • win10登录界面不显示用户头像或名称怎么办_恢复登录界面完整显示的操作方法

    登录界面缺少头像或账户名时,先检查账户名一致性,修复头像缓存,重设头像,扫描系统文件,必要时创建新管理员账户验证问题。 如果您在启动Windows 10后,登录界面仅显示密码输入框而缺少用户头像或账户名称,则可能是由于系统设置、缓存异常或账户配置问题导致。以下是恢复登录界面完整显示的详细操作方法。 …

    2026年9月21日
    100
  • deepseek下载速度优化_从deepseek下载速度优化官网获取

    deepseek下载速度优化入口在官网https://www.deepseek.com,进入后可通过设置调整响应模式、使用智能路由和数据压缩技术提升速度。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ deepseek下载速度优化入口地址在…

    2026年9月21日
    100
  • Linux如何设置目录的执行权限

    目录的执行权限是访问其内容的“钥匙”,使用chmod命令可通过符号或八进制模式设置,常见权限为755(所有者rwx,组和其他用户rx),递归设置时推荐结合find命令分别处理文件和目录,避免误加执行权限。 在Linux中,设置目录的执行权限( x )并非意味着你可以“运行”这个目录,而是赋予了你进入…

    2026年9月21日
    100
  • 纯白颜值、双模切换:“纯白小金刚”技嘉M27UP ICE显示器登场

    纯白颜值、双模切换:“纯白小金刚”技嘉M27UP ICE显示器登场纯白颜值、双模切换:“纯白小金刚”技嘉M27UP ICE显示器登场纯白颜值、双模切换:“纯白小金刚”技嘉M27UP ICE显示器登场纯白颜值、双模切换:“纯白小金刚”技嘉M27UP ICE显示器登场

    在电竞DIY领域深耕多年的技嘉,始终致力于满足玩家对高颜值与个性化外设的追求。为助力用户打造一体化的纯白主题电竞空间,品牌全新推出了专为此场景设计的M27UP ICE显示器。这款产品定位于两千元左右价位,凭借出众的纯白外观、卓越性能与超高性价比,被玩家们亲切称为“纯白小金刚”。如果你正想入手一台兼具…

    2026年9月21日 用户投稿
    000
  • 蛙漫漫画在线看 蛙漫漫画官网正版免费入口

    蛙漫漫画官网正版免费入口为https://www.waman.vip,该平台提供海量高清漫画资源,涵盖奇幻、恋爱、悬疑等多种题材,支持横屏、竖屏、滚动等阅读模式,并具备夜间模式、字体调整等优化功能,同时拥有弹幕互动、智能推荐、追更提醒等个性化服务,确保用户获得流畅舒适的阅读体验。 蛙漫漫画在线看 蛙…

    2026年9月21日
    100
  • .com网站安全维护_保障.com网站稳定的措施

    答案:保障.com网站稳定需加强安全防护、定期备份、实时监控和应急准备。部署防火墙、更新系统、使用HTTPS、限制端口;制定自动备份并异地存储,定期恢复测试;利用监控工具检测可用性与异常流量,优化加载速度;建立应急流程,严格权限管理,定期演练。细节执行到位才能确保长期安全稳定运行。 确保.com网站…

    2026年9月21日
    200
  • Flyway配置中安全使用环境变量的实践指南

    flyway配置中直接暴露数据库连接参数存在安全隐患。本文详细阐述了如何通过命令行参数和api调用两种主要方式,将环境变量安全地集成到flyway配置流程中。通过外部化管理敏感信息,可以有效提升数据库迁移配置的安全性、灵活性和可维护性,避免将凭证硬编码到配置文件中。 在数据库迁移实践中,将敏感的数据…

    2026年9月21日
    200
  • PHP 数组值比较与嵌套数组过滤教程

    本教程详细讲解如何在 PHP 中比较一个简单数组与一个复杂嵌套数组,并根据特定条件(如文件名匹配)过滤嵌套数组中的所有相关子数组。我们将通过识别非匹配项的索引,然后从所有子数组中移除这些项并重新索引,实现精确的数据筛选。 问题背景 在 php 开发中,我们经常会遇到需要处理结构复杂的数组数据。例如,…

    2026年9月21日
    200
  • 漫番漫画官方网页_ 漫番漫画在线访问入口

    漫番漫画官方网页入口为https://manwa.me,该平台汇聚多类型漫画资源,界面简洁、更新稳定,支持网页端流畅阅读;采用动态域名与镜像站点保障访问连续性,配备HTTPS加密提升安全性;提供个性化阅读设置、书架收藏及评论互动功能,优化用户体验。 漫番漫画官方网页入口地址在哪里?这是不少网友都关注…

    2026年9月21日
    300

发表回复

登录后才能评论
关注微信