内置文件上传使用\think\facade\Filesystem类封装方法
目录
简单上传
直接上传,使用默认上传设置
$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
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
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那里设置的时候遇到点问题。
来源地址:https://blog.csdn.net/json_ligege/article/details/128827509