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

TinyMCE编辑器配置正确但是不显示的解决方法
上一篇 2023-04-16
武汉挖呀挖黄老师走红,粉丝数量突破500万
下一篇 2023-05-06

评论列表(1条)

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

    我在tp6中怎么用不了呢

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

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

发表评论

captcha

相关推荐

  • PHP隐藏文件真实下载地址防盗链功能

      这个方案核心是隐藏文件真实地址,文件存放在网站根目录外(无法直接HTTP访问),或用权限锁定,只允许PHP。读取用动态临时下载链接替代,定时随机变更链接,随机密钥不可预测,过期自动失效。   校验来源域名、IP地址、链接有效期、签名,彻底防止盗链、批量下载、服务器过载。单IP限速、单文件并发下载限制、错误次数锁定,防止服务器过载。PHP代理输出文件,支持大文件断点续传   1.配置文件(config.php)统一管理密钥、有效期、限......

    2013-12-06
    21440
  • 去掉Tinymce图片上传自动添加的相对路径字符

      Tinymce 是一款非常强大的富文本编辑器,被广泛的应用在很多web项目中,但 Tinymce 在上传图片时会自动在图片路径 src 前面加上../../这样的相对路径,导致图片路径错误无法显示,这时只需要在初始化 Tinymce 配置 tinymce.init({}) 中设置 convert_urls :false 就可以去除这些多余的字符。 <!-- 实例化编辑器 --> <script> ti......

    2021-02-19
    18212
  • Thinkphp6开发Tinymce图片上传接口的方法

      Tinymce是项目开发中常用的编辑器之一,它的功能非常强大,界面简洁,又支持各种各样功能强大的插件,本文介绍一下ThinkPHP6开发Tinymce图片上传接口的方法。 public function uploads(){ $file = request()->file('file'); // 上传到本地服务器 $savename = \think\facade\Filesystem::disk('p......

    2021-03-02
    18610
  • ThinkPHP6开发wangEditor图片上传接口的方法

      wangEditor是一款近几年非常流行的富文本编辑器,它界面简洁,功能非常强大,本文介绍WangEditor图片上传接口的开发,以Thinkphp6为例。   首先看一下wangEditor官方的接口返回要求:   然后开发Thinkphp6的上传功能: public function testup(){ $file = request()->file('file'); $savename = \think......

    2021-03-02
    19030
  • PHP使用QR Code生成二维码实例

      要在PHP中生成二维码,可以使用第三方库,其中一个流行的是PHP QR Code库。以下是一个简单的示例,演示如何使用PHP QR Code库生成二维码。   使用 Composer 安装 PHP QR Code: composer require chillerlan/php-qrcode   PHP 生成二维码示例 <?php // 引入 Composer 的自动加载文件 require_once 'vendor/aut......

    2021-10-07
    17750
  • ThinkPHP多入口文件多应用设置方法

      在使用ThinkPHP做项目开发时,为了让架构更清晰科学,提高安全和性能,方便维护,需要将多应用分配到各自对应的不同的入口文件上,而不是整个项目用一个入口文件。   此方法适用于ThinkPHP6/8,这是ThinkPHP默认的单应用结构: ├─app 应用目录 │ ├─controller 控制器目录 │ ├─model 模型目录 │ ├─view 视图目......

    2024-03-31
    8290
  • ThinkPHP获取数据库类型和版本的方法

      在开发后台功能时,可能会需要自动获取当前使用的数据库类型和版本的情况,下面就举个简单的例子实现自动获取当前项目使用的是MySQL还是SQLite数据库及使用的相应数据库版本的方法: // 数据库类型 $default = config('database.default'); $config = config('database.connections.' . $default); $db_type = strtolower(tri......

    2024-11-02
    8890
  • ThinkPHP路由简单配置

      ThinkPHP拥有丰富的路由配置功能,灵活的配置路由可以更好的优化URL结构,方便维护,下面简单介绍一下ThinkPHP路由配置方法。   ThinkPHP默认路由结构为/入口文件/应用/控制器/方法,因此就产生了这样一长串的URL结构: https://127.0.0.2/index.php/index/index/index   这还仅仅是首页URL,这样的结构显然不利于维护,更不利于SEO,所以需要做路由配置,以多应用为例,......

    2025-04-21
    7490