ThinkPHP文件上传验证器

news2024/11/15 4:41:01

在thinkphp中的文件上传功能,添加验证器的过程中.踩得小坑,简单记录。
具体内容如下

代码如下.
视图层 就是简单的form表单,用来上传文件。

<form action="/admin/files/upFile" enctype="multipart/form-data" method="post">
        <input type="file" name="image" /> <br>
        <button  type="submit" >上传 </button>
    </form>

控制器层用来接收传进来的数据以及返回信息.

public function upFile(){
        if (\request()->method() == "POST") {
            $file = request()->file();
//            halt($file);
            $rt = \app\admin\model\Files::uploadFile($file);
            if ($rt['code'] == 0) {
                $this->success($rt['msg']);
            } else {
                $this->error($rt['msg']);
            }
        }
            $this->error("错误的请求方法","/index");
//        halt($file);
    }

这里我将具体的处理代码放在了模型当中。存在问题的代码如下,

public static function uploadFile($file)
    {
        try {
            //定义上传文件大小
            $size = 2000*1024;
            //验证器检测
            validate(['image'=>"image|fileSize:$size"])->check($file);
            //保存文件 到public配置下的avatar目录下
            $savename = \think\facade\Filesystem::disk("public")->putFile( 'avatar', $file);
//            halt($savename);
            //定义数组信息
            $arr = ["code"=>0,'msg'=>"上传成功"];
        }catch (ValidateException $e){
            $arr = ["code"=>0,'msg'=>$e->getError()];
        }catch (\Exception $e){
            $arr = ["code"=>2,'msg'=>'系统错误'];
        }
        return $arr;
    }

问题出现的原因主要是validate验证器接收的只能为数组,那么我就在控制器传入参数的时候,传入的内容就为数组.
$file = request()->file(); 即未去定义name, halt输出可以看到** f i l e ∗ ∗ 为数组。 ! [ 在这里插入图片描述 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / 399 a a 0717 b 9 c 490 f 8292 a 9 a d a 126 f 879. p n g ) 验证器验证正常 , 但是 ‘ p u t F i l e ‘ 方法就会产生如下错误。 ! [ 在这里插入图片描述 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / f 92 b a e 9 d 022 e 4 a b f 910 e 3850654 c 56 a 4. p n g ) 这里我的解决方法是在验证器验证成功之后 , 在重新获取 file**为数组。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/399aa0717b9c490f8292a9ada126f879.png)验证器验证正常,但是`putFile`方法就会产生如下错误。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f92bae9d022e4abf910e3850654c56a4.png)这里我的解决方法是在验证器验证成功之后,在重新获取 file为数组。![在这里插入图片描述](https://imgblog.csdnimg.cn/399aa0717b9c490f8292a9ada126f879.png)验证器验证正常,但是putFile方法就会产生如下错误。![在这里插入图片描述](https://imgblog.csdnimg.cn/f92bae9d022e4abf910e3850654c56a4.png)这里我的解决方法是在验证器验证成功之后,在重新获取file.
Model层代码修改后如下,

public static function uploadFile($file)
    {
        try {
            //定义上传文件大小
            $size = 2000*1024;
            //验证器检测
            validate(['image'=>"image|fileSize:$size"])->check($file);
            //重新定义$file
            $file = request()->file("image");
            //保存文件 到public配置下的avatar目录下
            $savename = \think\facade\Filesystem::disk("public")->putFile( 'avatar', $file);
//            halt($savename);
            //定义数组信息
            $arr = ["code"=>0,'msg'=>"上传成功"];
        }catch (ValidateException $e){
            $arr = ["code"=>0,'msg'=>$e->getError()];
        }catch (\Exception $e){
            $arr = ["code"=>2,'msg'=>'系统错误'];
        }
        return $arr;
    }

重新上传一个符合符合要求的文件
在这里插入图片描述反之
在这里插入图片描述
暂时没有想到更好的解决方法,希望各位大佬多多指点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1131717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目部署Linux步骤

1、最小化安装centos7-环境准备 安装epel-release 安装epel-release&#xff0c;因为有些rpm包在官方库中找不到。前提是保证可以联网 yum install -y epel-release 修改IP net-tools net-tool&#xff1a;工具包集合&#xff0c;包含ifconfig等命令 yum install -y net-…

桶装水订水送水小程序开发搭建;

上门送水小程序桶装水配送是一款的同城上门配送平台&#xff0c;为用户提供便捷的桶装水配送服务。解决用户在获取干净健康的饮用水方面的需求&#xff0c;提供高效、便捷的在线预约和下单服务。 小程序平台开发&#xff0c;具备强大的技术支持和良好的用户体验。用户可以通过…

如何书写一篇好的博客?

前言 大家在写博客&#xff0c;一定不要为了火&#xff0c;才去写博客&#xff0c;用数量去博取访问量。我们可能会短暂的收获成就&#xff0c;但是质量上却没有被认可&#xff0c;这是非常不可取的。当未来面试官看我们的博客的时候&#xff0c;看到我们虽然访问量多&#xff…

分享一下怎么做一个房间预定链接

在旅游行业中&#xff0c;房间预定是非常重要的一环。随着互联网的普及和旅游业的发展&#xff0c;越来越多的人选择在网上预订房间。本文将介绍如何制作一个房间预定链接&#xff0c;以及推广该链接的方法和策略&#xff0c;帮助读者更好地了解房间预定的需求和实现方式。 一、…

如何在Postman中使用静态HTTP

首先&#xff0c;打开 Postman 软件。在 Postman 的菜单栏中&#xff0c;点击 “Preferences”&#xff08;偏好设置&#xff09;。 亲身经验&#xff1a;我自己尝试了这个方法&#xff0c;发现它非常适用于需要使用HTTP的场景。 数据和引证&#xff1a;根据 Postman 官方文档…

qt的一些自绘控件

https://download.csdn.net/download/venice0708/88469835

2023 年 Web 应用程序开发最佳技术堆栈

发现 Web 应用程序开发中的最新趋势技术&#xff0c;并找到有关更适合您的业务增长的技术堆栈的建议。&#x1f9e0;&#x1f4aa;&#x1f468;‍&#x1f4bb; 在不断发展的 Web 开发领域&#xff0c;您部署的技术堆栈不仅仅是编码&#xff0c;而是开辟一条成功之路&#xff…

极简运行Vue打包文件:让你的网页快速启动,高效展现!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章内容 ⭐ 写…

“唯品会VIP商品API:一键获取奢侈品详情,尊享品质生活!“

要获取唯品会VIP商品的详细信息&#xff0c;您可以通过唯品会的API接口进行调用。 唯品会提供了多种商品选择&#xff0c;包括服装、美容护肤、鞋子、箱包、家居、母婴等等。在这些商品中&#xff0c;VIP奢侈品专区是唯品会的重要特色之一。 要获取VIP商品的详细信息&#xf…

mac安装jenkins

1、安装jenkins之前确认是否安装了homebrew 2、开始安装jenkins 安装完如下图则安装完成 3、改一下ip和端口 4、启动jenkins brew services restart jenkins 使用自己修改后的ip:port http://0.0.0.0:8088 根据提示信息&#xff0c;拿到管理员密码&#xff0c;并解锁 5、安装…

如何将 Helm Chart 推送至 Harbor ?

Author&#xff1a;rab 前言&#xff1a;我们说 Helm 的私有仓库可以是任何 HTTP Server&#xff08;如 Nginx、Apache 等&#xff09;&#xff0c;而 Harbor 自带 Helm 私有仓库的功能&#xff08;但默认是禁用的&#xff0c;需要我们手动启用&#xff09;&#xff0c;如果为了…

蓝桥杯 Java k倍区间

前缀和的一个神奇算法&#xff0c;这道题暴力是遍历前缀和的差&#xff0c;也就是遍历所有区间和看他是不是能不能正好除尽k 这道题的技巧是将所有前缀和和k求余 按照求余的结果放在一个数组中 那么余数为0的前缀和a一定满足要求&#xff08;[0,a]&#xff09; 余数相同的两两…

家政预约上门app开发小程序同城服务

家政公司管理软件系统助您轻松管理各类家政业务&#xff0c;包括家政、保洁、维修等。 通过推广获客系统&#xff0c;您可以集成分销客户裂变、推广等&#xff0c;轻松获取更多客户。 活动营销系统支持各种营销活动&#xff0c;如充值卡、服务卡、秒杀、拼团等&#xff0c;有…

【opencv】【CPU】windows10下opencv4.8.0-cuda C++版本源码编译教程

【opencv】【CPU】windows10下opencv4.8.0-cuda C版本源码编译教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【opencv】【CPU】windows10下opencv4.8.0-cuda C版本源码编译教程前言准备工具cmakeopencv4.8.0opencv_contrib CMake编译VS2…

【机器学习】迁移学习(Transfer)详解!

1. 什么是迁移学习 迁移学习(Transfer Learning)是一种机器学习方法&#xff0c;就是把为任务 A 开发的模型作为初始点&#xff0c;重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务&#xff0c;虽然大多数机器学习算法都是…

canvas基础3 -- 交互

点击交互 使用 isPointInPath(x, y) 判断鼠标点击位置在不在图形内 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&…

「北大社送书」学习Flutter编程 — 《从零基础到精通Flutter开发》

目录 1.书籍推荐理由 2.本书特色 3.内容简介 4.书籍概览 1.书籍推荐理由 一套代码&#xff0c;构建多平台精美的应用&#xff1a;本书从真实的开发场景出发&#xff0c;完整地讲解了Flutter框架&#xff0c;帮助你快速掌握Flutter的基础知识和开发技巧&#xff0c;助你在移…

服务器百万并发的原理与实现

什么是百万并发&#xff1f; 指的是服务器接收百万个连接或数据会在同一时刻接收到&#xff0c;也就是同时能看到 百万个连接或数据。 在了解服务器百万并发的同时&#xff0c;我们先来看看我们的百万并发服务器的结构图。 主体是以reactor为核心&#xff0c;链表方式存储事…

「北大社送书」学习MATLAB—从算法到实战

MATLAB科学计算从入门到精通 一句话推荐书籍特色内容简介书籍概览 从代码到函数&#xff0c;从算法到实战&#xff0c;从问题到应用&#xff0c;由浅入深掌握科学计算方法&#xff0c;高效解决实际问题。 一句话推荐 科学计算基础入门&#xff0c;高效解决实际问题。 书籍特色…

vue3中的provide 与 inject

一、概述 作用&#xff1a;实现祖先与后代组件的通信。一般为祖孙通信&#xff0c;因为子组件可以用props来通信。 语法&#xff1a;父组件中&#xff1a;provide(car, car) 子组件中&#xff1a;let car inject(car) 二、举例说明&#xff08;代码如下&#xff09; &…