FileSystem 是一个非常好用的文件上传扩展类,结合 Thinkphp 使用可以轻松的完成文件上传功能的开发。但是默认情况下 FileSystem 是按照“年月日”来生成上传日期目录的,长期使用下来就会有大量的“Ymd”目录,不方便管理,像我平时更新内容不多,如果以“Ym”的格式生成目录,按同一年同一月上传的文件放在一个日期目录中就方便管理多了。
需要注意的是,Thinkphp 6.1 移除了 FileSystem,需要重新安装回来:
composer require topthink/think-filesystem
然后打开 config 目录中的 filesystem.php 文件,代码如下:
主要注意两个配置项,其中的 uploads 为你的文件上传总目录:
// 磁盘路径
'root' => app()->getRootPath() . 'public/uploads',
// 磁盘路径对应的外部URL路径
'url' => '/uploads',
然后写一个文件上传接口,并配置生成目录格式:
// 图片上传
public function uploads(){
$file = request()->file('file');
// 上传到本地服务器
$savename = \think\facade\Filesystem::disk('public')->putFile('images',$file);
// 替换\为/
$savename = str_replace('\\','/',$savename);
$imagepath = '/uploads/'.$savename;
// 输出tinymce规定的返回数据
echo json_encode(['location' => $imagepath]);
exit;
}
其中 putFile 中的 images 代表在文件上传总目录 uploads 中生成 images 目录,但是按照默认的配置会在 images 目录中生成“Ymd”这种格式的日期目录,我们需要改成“Ym”这样的目录,使用闭包函数修改代码如下:
// 图片上传
public function uploads(){
$file = request()->file('file');
// 上传到本地服务器
$savename = \think\facade\Filesystem::disk('public')->putFile('images',$file,function(){
return date('Ym').DIRECTORY_SEPARATOR.md5(microtime(true));
});
// 替换\为/
$savename = str_replace('\\','/',$savename);
$imagepath = '/uploads/'.$savename;
// 输出tinymce规定的返回数据
echo json_encode(['location' => $imagepath]);
exit;
}
其中 date('Ym') 中的 Ym 代表年月,md5(microtime(true)) 为以 md5 加密当前 Unix 时间戳的微秒数为上传的文件名。今天是 2023年4月23日,原本会生成 20230423 这个目录,修改后就会生成 202304 这个目录。
本站原创内容,如需转载请注明来源:https://www.liutonghui.com/220.html
评论列表(2条)
我在tp6中怎么用不了呢
回复 清风细雨de夜曲:注意本文开头写的,tp6.1默认移除了 FileSystem,需要重新安装回来。