ThinkPHP文件上传类FileSystem自定义生成年月日目录

  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

上一篇 2023-04-16
下一篇 2023-05-06

评论列表(2条)

  • 清风细雨de夜曲 2023-06-05 09:51:33

    我在tp6中怎么用不了呢

    • 管理员 2023-06-05 13:52:44

      回复 清风细雨de夜曲:注意本文开头写的,tp6.1默认移除了 FileSystem,需要重新安装回来。

发表评论

captcha

相关推荐

  • 再谈PHP错误与异常处理

      请一定要注意,没有特殊说明:本例 PHP Version < 7   说起PHP异常处理,大家首先会想到try-catch,那好,我们先看一段程序吧:有一个test.php文件,有一段简单的PHP程序,内容如下,然后命令行执行:php test.php <?php $num = 0; try { echo 1/$num; } catch (Exception $e){ ......

    2017-06-12
    13780
  • CSS创建竖排文字的简单方法

      在制作网页的时候我们经常需要创建一些竖排的文字,或许这对你来说是一件很简单的事情,但是你是否想过用CSS可有N种创建竖排文字的方法?下面是由我翻译自Nettuts+的文章,希望这几种方法能够给你带来一些提示。   方法一:<br />标签   一种可能的方法(但不推荐)是在每个字母后面添加<br />标签来实现竖排文字: <h1> N <br />E <br />T ......

    2013-11-27
    13640
  • JavaScrpit中异步请求Ajax实现,多个Ajax请求数据交互

      在前端页面开发的过程中,经常使用到Ajax请求,异步提交表单数据,或者异步刷新页面。   一般来说,使用Jquery中的ReferenceError: katex is not defined.post,$.getJSON,非常方便,但是有的时候,我们只需要ajax功能,这样引入Jquery比较不划算。   所以接下来便用原生JavaScrpit实现一个简单的Ajax请求,并说明ajax请求中的跨域访问问题,以及多个ajax请求的数......

    2017-07-19
    9500
  • PHP实现获取农历(阴历)、节日、节气的类与用法示例

      本文实例讲述了php实现获取农历(阴历)、节日、节气的类与用法。分享给大家供大家参考,具体如下: <?php /* * 农历 节气 节日 */ header("Content-Type:text/html;charset=utf-8"); class Lunar { var $MIN_YEAR = 1891; var $MAX_YEAR = 2100; var $lunarInfo = array( arr......

    2018-03-07
    18370
  • 刀郎新歌《罗刹海市》引发轰动

      刀郎的新歌《罗刹海市》最近引起了轰动,但这次不是因为它的音乐本身有多么好听或传唱度有多高,而是因为歌词被许多网友解读为内涵了那英、汪峰、杨坤和高晓松等名人,引发了广泛的兴趣和热议。   歌词中的一些词汇和意象被认为与这些名人的特点和经历有关,网友们纷纷展开联想,将歌词与这些名人一一对应起来。那英被指歌词中“那又鸟”所指,杨坤被描述为“马户”,高晓松被称为“拿扇子的公公&r......

    2023-08-03
    5860
  • 窃格瓦拉逆袭:周立齐的经历引发社会对价值观的思考

      周立齐,这个曾经因偷窃电动车电瓶而闻名一时的人,如今已成为互联网上的网红。他曾因为偷窃行为被网民称为“窃格瓦拉”。但是,这个曾经的罪犯在出狱后走上了创业的道路,甚至成为了一名企业家。   周立齐曾经因为多次盗窃电动车电瓶而被判刑。在狱中,他因为一句“打工是不可能打工的,这辈子不可能打工。”而走红,这句话甚至被做成了表情包,在网络上广为流传。出狱后,他并没有停下脚步,而是利用这波流量积......

    2023-03-27
    6340
  • PHP封装数据库操作Model类示例

      数据库操作是产品开发中最常见的需求,封装一个PHP数据库操作Model类可以减少反复的写大量SQL语句,下面就为大家分享一个数据库操作Model类。 <?php //引入配置文件 include "./config.php"; class Model { public $link;//存储连接对象 public $tableName = "";//存储表名 public $field =......

    2019-06-12
    15464
  • 华为Mate60手机开售,麒麟5G芯片回归,遥遥领先!

      没开发布会,没有预告就直接开卖备受关注的旗舰手机,华为Mate60系列算是开了个头。这几天华为登上了热搜,这次是因为华为Mate60手机携带“麒麟芯片”提前开售,瞬间售罄,同时也标志着麒麟5G芯片的正式回归。这一消息在各大主流媒体平台上迅速引发热议,网友们纷纷发表意见,自媒体人也争相蹭热度,提出各自观点。   如果你打开华为商城app,可以看到华为已经在自家商城上架了华为Mate60系列手机,而这些手机已经......

    2023-08-31
    7270