内置文件上传使用\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那里设置的时候遇到点问题。