ThinkPHP6 文件上传

news2024/11/18 4:52:01

内置文件上传使用\think\facade\Filesystem类封装方法

目录

简单上传

public存储文件 

文件验证

命名规则

使用sha1

使用MD5

使用date

指定文件名称

自定义命名规则

更多上传设置

总结


 

简单上传

直接上传,使用默认上传设置

$savename = \think\facade\Filesystem::putFile('topic', $file);
print_r($savename);die;

返回结果:

topic/20230130\e5c255ec6a6c1b99ff735cf308a8a54b.jpg

发现在app/runtime目录下新增目录结构及文件

生成以当前日期为子目录,以微秒时间的md5编码为文件名的文件

public存储文件 

修改文件存储在public下

$savename = \think\facade\Filesystem::disk('public')
            ->putFile('topic', $file);

print_r($savename);die;

返回结果:

topic/20230130\7b80e19a10e8fdef36166e35e19b017c.jpg

可见项目入口文件同级目录public下新增目录结构及文件

同样生成以当前日期为子目录,以微秒时间的md5编码为文件名的文件

文件验证

验证可参考表单验证使用,与文件验证有关的规则为:

验证参数

说明

fileSize

上传文件的最大字节

fileExt

文件后缀,多个用逗号分割或者数组

fileMime

文件MIME类型,多个用逗号分割或者数组

image

验证图像文件的尺寸和类型

命名规则

Tp封装了三种命名规则,默认使用date

规则

描述

date

根据日期和微秒数生成

md5

对文件使用md5_file散列生成

sha1

对文件使用sha1_file散列生成

使用sha1

$savename = \think\facade\Filesystem::disk('public')
            ->putFile('topic', $file, 'sha1');

print_r($savename);die;

返回结果:

topic/d3\e1681ca30eca89f9a46b40c6433f4c52eda77a.jpg

使用MD5

$savename = \think\facade\Filesystem::disk('public')
            ->putFile('topic', $file, 'md5');

print_r($savename);die;

返回结果 :

topic/83\d6e7302d835dae41ea4a22f2014e6b.jpg

使用date

因为默认使用date命名规则,所以不需要设置第三个参数;如果设置就会报错,提示需要为date函数设置一个必须参数。

指定文件名称

$savename = \think\facade\Filesystem::disk('public')
->putFileAs('topic', $file,'new.jpg');

print_r($savename);die;

返回结果

topic/new.jpg

自定义命名规则

如果不想用tp中封装的这些命名规则,可以自己写一个函数来处理并返回文件名称

调用方式如下:

$savename = \think\facade\Filesystem::disk('public')
            ->putFile('topic', $file, '自定义函数名称');

print_r($savename);die;

注意:函数名称不带括号,并且没有参数设置。

更多上传设置

如果需要修改更多关于上传设置,可修改app/config/filesystem.php;

多应用则修改相应应用下config/filesystem.php

<?php

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

 比如修改storage为uploads

<?php

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

上传后增加uploads文件夹

在项目中使用,可以在返回路径前设置公共父级路径进行拼接使用。

总结

上传比较简单,照着官方文档一路很顺畅的上传,只有在date那里设置的时候遇到点问题。

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

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

相关文章

业务平台扩展支持TDengine时序数据库方案

1 场景与架构 1.1业务架构 这里涉及项目隐私&#xff0c;架构图不方便公开。 大致情况就是&#xff1a; 应用层的园区畅行、生态宜居、安全守护是我方要交付的系统。 平台层的物联网感知中台是我方平台。 1.2数据架构 从数据架构看&#xff0c;园区畅行…

第四章 git分支操作

4.1什么是分支 在版本控制过程中&#xff0c;同时推进多个任务&#xff0c;为每个任务&#xff0c;我们就可以创建每个任务的单独 分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来&#xff0c;开发自己分支的时 候&#xff0c;不会影响主线分支的运行。对于初…

优化器-RBO 的规则转化

一、RBO 背景介绍RBO&#xff08;Rule-Based Optimization&#xff0c;基于规则的优化器&#xff09;有着一套严格的使用规则&#xff0c;按照 RBO 去写 SQL 语句&#xff0c;无论数据表中的内容怎样&#xff0c;也不会影响到你的“执行计划”。换言之 RBO 对数据不“敏感”&am…

码元,码元速率,波特率,比特率(个人理解总结)

参考&#xff1a;https://baike.baidu.com/item/%E7%A0%81%E5%85%83%E4%BC%A0%E8%BE%93%E9%80%9F%E7%8E%87/6305673 https://baike.baidu.com/item/%E7%A0%81%E5%85%83%E9%80%9F%E7%8E%87/10945076 https://baike.baidu.com/item/%E6%9B%BC%E5%BD%BB%E6%96%AF%E7%89%B9%E7%BC%9…

低代码:如何成为企业业务价值提升的一大利器?

首先&#xff0c;来看低代码能为企业带来什么&#xff1f; 低代码开发能够增加软件所创造的价值&#xff0c;帮助企业机构衡量企业级低代码平台的价值并计算它将会产生的影响。 低代码在企业的现实运用中能为企业带来巨大的经济效益。众所周知&#xff0c;软件可以推动业务价值…

Cesium中的飞线效果-Shader

飞线的顶点着色器坐标系换算较为复杂。代码中的vertexShaderSource部分为cesium源码中附带的顶点着色器。后期增加了一些传参方法。 用到的GLSL的API: attribute vec2 st; 两个分量为 st.s: 飞线的长度(0-1) st.t: 飞线的宽度(0~1) czm_frameNumber 每帧都会自增,用…

metersphere将默认关闭加载的UI服务启动

目录 一、安装 二、配置 selenium-grid 三、下载驱动程序 三、运行驱动程序 四、将本地运行Selenium-server配置到MeterSphere平台 一、安装 /opt/metersphere/.env&#xff0c;有个 ui_enabled属性&#xff0c;改成true, 然后 msctl reload 二、配置 selenium-grid 这里…

pytest自动化测试执行环境切换的两种解决方案

一、痛点分析 在实际企业的项目中&#xff0c;自动化测试的代码往往需要在不同的环境中进行切换&#xff0c;比如多套测试环境、预上线环境、UAT环境、线上环境等等&#xff0c;并且在DevOps理念中&#xff0c;往往自动化都会与Jenkins进行CI/CD&#xff0c;不论是定时执行策略…

硬盘已删除的数据怎么恢复?磁盘数据恢复,试试这3大方法!

电脑里面的硬盘起着存储安装程序或者保存着重要数据的功能&#xff0c;里面有我们很多数据&#xff0c;比如图片、文件、视频等。 有时遇到一些情况&#xff0c;我们把硬盘里面的重要数据删除了&#xff0c;或者是硬盘被损坏了&#xff0c;我们该怎么办&#xff1f;磁盘数据恢…

基于声学模型共享的零资源韩语识别系统

声学模型共享方法是极低资源小语种语音识别一种解决方案&#xff0c;能够实现不需要任何语音数据的语音识别。本文介绍清华大学语音与音频技术实验室的零资源韩语语音系统&#xff0c;其在不使用任何韩语语音数据的情况下&#xff0c;在Zeroth韩语数据集上的测试CER达到了27.33…

Redis主从架构 | 黑马Redis高级篇

目录 一、搭建主从架构 1、为什么要搭建 2、准备实例和配置 3、启动 4、开启主从关系 二、 数据同步原理 1、全量同步 2、命令传播 3、增量同步 三、常见面试题 一、搭建主从架构 1、为什么要搭建 如果服务器发生了宕机&#xff0c;由于数据恢复是需要点时间&#…

51.Isaac教程--使用强化学习的DollyDocking

使用强化学习的DollyDocking ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录使用强化学习的DollyDocking快速开始推理未来场景工厂多代理场景训练利用训练的模型运行推理Codelets模拟Isaac SDK 中的健身房状态机流程强化学习政策JSON 管…

Jenkins+GitLab自动化部署到Docker容器

JenkinsGitLab自动化部署到Docker容器1、编写Dockerfile2、为测试服务器配置Docker镜像加速器3、Jenkins相关配置3.1 配置测试服务器3.2 Pre Steps配置3.3 Post Steps配置3.4 执行构建本文是对JenkinsGitMaven自动化部署配置这篇文章的补充&#xff0c;有关基本的环境搭建从这篇…

Python的 6 大类数据类型,先收藏再说......

计算机程序&#xff0c;就是对数据进行操作。 无论你学习那种语言开发&#xff0c;都需要学习具体的数据类型&#xff0c; 每种开发语言都有自己不同数据类型。 下面是针对python语言的全部数据类型详细汇总&#xff1a; Python中可以自定义数据类型,可以具有无限种数据类型…

爱普生Epson WF110彩色无线便携式打印机错误E-12维护箱已到使用寿命

基本参数: 产品定位 墨仓式打印机 最高分辨率(dpi) 5760X1440dpi 网络功能 支持无线网络打印

【MySQL】成为MySQL高手必须要知道的MySQL索引

MySQL基础mysql 的查询流程索引是什么呢&#xff1f;MySQL索引优缺点MySQL索引分类上一篇了解到了MySQL安装步骤&#xff0c;接下来就开始学习MySQL索引知识点 mysql 的查询流程 查询流程大致是&#xff1a; mysql 客户端通过协议与 mysql 服务器建连接&#xff0c;发送查询…

Lesson 4.6 逻辑回归的手动实现

文章目录一、逻辑回归损失函数的梯度计算表达式二、创建分类数据集生成器1. 手动创建分类数据2. 创建分类数据生成器三、逻辑回归的手动实现四、逻辑回归的分类性能瓶颈与算法评价讨论完梯度下降的相关内容之后&#xff0c;接下来我们尝试使用梯度下降算法求解逻辑回归损失函数…

Microsoft Office( Word、Excel、PowerPoint)的安装

1 下载Office Tool Plus 官网地址&#xff1a;点击下载 2 点击Office Tool Plus.exe 3 接受软件许可条款和Microsoft服务协议 4 点击安装Office 5 选择Office 专业增强版 2019 6 确认安装Office 专业增强版 2019 7 关闭安全中心警报 8 等待安装完成 9 点击关闭 10 点击返回…

VMware创建Ubuntu系统

Ubuntu镜像可以去各个镜像网站下载 官网&#xff1a;https://ubuntu.com/ 中文官网&#xff1a;https://cn.ubuntu.com/ 镜像下载 使用Ubuntu在开发的时候下载LTS版本&#xff0c;也可以下载其他版本以及历史版本 这里面使用的镜像是ubuntu-16.04.7-desktop-amd64.iso版本&a…

1月书单 2月新书预告 | 百万册畅销书全新续作来啦

幸福而忙碌的 1 月一溜烟就跑走了&#xff0c;我们已经来到 2 月的第 1 天。最近&#xff0c;公司楼下售卖咖啡的地方&#xff0c;总是排着长长的队……想必不少小伙伴还在找状态。 图灵君先带大家回忆一下 1 月我们上新了哪些书。 01 《这才是服务设计》 作者&#xff1a;[德…