tp6上传文件大小超过了最大值+验证文件上传大小和格式函数

news/2025/2/21 7:29:14

问题:

最近用tp6的文件上传方法上传文件时报文件过大错误。如下所示:

 $file = $this->request->file('file');
{
	"code": 1,
	"msg": "上传文件大小超过了最大值!",
	"data": {
		"code": 1,
		"line": 1232,
		"file": "D:\\myweb\\ytems\\vendor\\topthink\\framework\\src\\think\\Request.php",
		"message": "上传文件大小超过了最大值!"
    }
}

解决:

1、php.ini 配置

修改 upload_max_filesize = 10M 值为合适的大小

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 10M

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

2、 确认TP6框架的文件上传限制配置

TP6框架本身对文件上传有一定的限制,这个限制可以在配置文件中进行设置。你需要检查并修改以下配置文件:

  • config/filesystem.php‌:这个文件通常包含了文件上传的相关配置。你可以找到类似max_filesize的配置项,并将其设置为一个更大的值。例如:
    return [
        // ...
        'disks' => [
            'public' => [
                // ...
                'max_filesize' => '20M', // 设置为你需要的最大值
            ],
            // ...
        ],
        // ...
    ];
    

3、构建验证文件上传大小和格式的函数 

调用函数:

$file = $this->request->file('file');
//校验图片 
$checkFile = checkUploadFile($file, 2, ['jpg','jpeg','png']);
if($checkFile['code'] != 200){
    return error($checkFile['msg']);
}
/**
 * 判断上传文件是否合法   如:php文件不可上传
 *
 * @author
 * @param $file
 * @param $only_php_check  是否仅检查非php文件
 * @param $allowed_types  允许的文件类型
 * @param $allowed_extensions  允许的文件扩展名
 * @param $from_allowed_size  允许的文件大小 单位 M
 * @return  array
 */
function checkUploadFile($file,  $from_allowed_size=2, $allowed_extensions=[], $only_php_check=false) {

    $allowed_size = $from_allowed_size * 1024 * 1024;

    if (!isset($file)) {
        return false;
    }

    $check_php = true;

    //允许的文件类型(mimeType): application/vnd.ms-excel
    //不允许的类型 text/x-php
    $mime_type = strtolower($file->getMime());//text/x-php
    $extension = strtolower($file->getOriginalExtension());//php
    $file_size = $file->getSize();

    if($mime_type == 'text/x-php' || $extension == 'php'){
        $check_php = false;//上传文件为php文件
    }

    if($only_php_check){//仅判断是否为php文件的话 此时就返回结果。终止后续判断了。
        if($check_php){
            return ['code'=>200, 'msg'=>'上传成功'];
        }else{
            return ['code'=>4003, 'msg'=>'非法上传文件'];//为 php文件
        }

    }

    // 允许的MIME类型数组和扩展名数组
    if(!$allowed_extensions){
        $allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'xls'];
        $allowed_types = ['image/jpeg', 'image/png', 'image/gif', 'application/vnd.ms-excel'];
    }else{
        $allowed_types = [];
        foreach ($allowed_extensions as $k=>&$v) {
            switch($v){
                case 'jpg':
                case 'jpeg':
                    $allowed_types[$k] = 'image/jpeg';
                    break;
                case 'png':
                    $allowed_types[$k] = 'image/png';
                    break;
                case 'gif':
                    $allowed_types[$k] = 'image/gif';
                    break;
                case 'xls':
                    $allowed_types[$k] = 'application/vnd.ms-excel';
                    break;
                default:
                    $allowed_types[$k] = $v;
                    break;
            }
        }
    }

    if($file_size > $allowed_size){
        return ['code'=>4002, 'msg'=>'上传文件尺寸不可大于'.$from_allowed_size.'M'];
    }

    // 检查MIME类型和扩展名是否都在允许的列表中
    if (in_array($mime_type, $allowed_types) && in_array($extension, $allowed_extensions)) {
        return ['code'=>200, 'msg'=>'上传成功'];
    } else {
        return ['code'=>4001, 'msg'=>'上传图片格式不正确'];
    }

}


http://www.niftyadmin.cn/n/5860455.html

相关文章

网络协议相关知识有哪些?

前言 网络协议的基础是OSI和TCP/IP模型,这两个模型是理解协议分层的关键。 正文(仅是个人理解,如有遗漏望海涵) 网络协议是网络中设备间通信的规则和标准,涉及数据传输、路由、错误控制等多个方面。以下是网络协议相关知识的系统梳理: 一、网络协议分层模型 1、OSI七…

5.5 Soft Prompt技术:任务特定微调的新范式

Soft Prompt技术:任务特定微调的新范式 一、Soft Prompt技术全景图 mindmap root((Soft Prompt)) Prefix Tuning 连续向量优化 层级前缀插入 Prompt Tuning 可学习提示向量 任务特定初始化 P-Tuning 可微提示优化 双向提示设计 Soft Prompt的核心优势: 参数高效…

RK3568开发板/电脑/ubuntu处于同一网段互通

1.查看无线局域网适配器WLAN winR输入cmd打开电脑终端输入ipconfig或arp -a查看无线局域网IP地址,这就是WIFI. 这里的IPv4是192.168.0.147,默认网关是192.168.0.1,根据网关地址配以太网IP, ubuntu的IP,和rk3568的IP。 且IP范围为192.168.…

ceph HEALTH_WARN clock skew detected on mon.f, mon.o, mon.p, mon.q

问题 ceph health detail[WRN] MON_CLOCK_SKEW: clock skew detected on mon.f, mon.o, mon.p, mon.qmon.f clock skew 0.243128s > max 0.05s (latency 0.000836159s)mon.o clock skew 16.249s > max 0.05s (latency 0<

K8S下redis哨兵集群使用secret隐藏configmap内明文密码方案详解

#作者&#xff1a;朱雷 文章目录 一、背景环境及方案说明1.1、环境说明1.2、方案一&#xff1a;使用配置文件设置密码1.3、方案二&#xff1a;使用args 的命令行传参设置密码 二、redis secret configmap deployment参考2.1 创建secret-redis.yaml参考2.2 修改configmap配置参…

聚焦于机器人研究,提出 FuSe 方法,通过语言锚定对通用机器人策略进行微调 视觉、触觉、听觉

聚焦于机器人研究,提出 FuSe 方法,通过语言锚定对通用机器人策略进行微调,利用多模态传感器提升性能,在多种任务中表现优异,具备跨模态推理能力。 研究背景:与世界交互需多感官协作,当前先进通用机器人策略多依赖视觉和本体感受数据训练,忽略其他模态信息。方法:FuSe …

分布式光纤声波振动技术在钻井泄漏检测中的应用

在石油天然气的钻井作业中&#xff0c;及时发现并定位泄漏点对于保障开采安全、降低环境污染以及避免经济损失至关重要。传统的泄漏检测方法往往存在局限性&#xff0c;而分布式光纤声波振动技术凭借其独特的优势&#xff0c;正逐渐成为钻井过程中寻找泄漏的有力工具。 技术原理…

深入解析MySQL索引:本质、分类、选择及使用原则

一、索引的本质 索引&#xff0c;作为数据库中的一种核心数据结构&#xff0c;其本质在于通过改变数据结构来加快查询效率。可以将索引理解为数据库中的一种“目录”或“路标”&#xff0c;它帮助数据库系统快速定位到需要查询的数据行&#xff0c;从而大大提高数据检索的速度…