ThinkPHP6.0 文件上传封装类

TP6.0内置文件上传只是上传到本地服务器,上传到远程或者第三方平台的话需要安装额外的扩展,本文章对基于TP6.0的内置文件上传进行封装。

个人技术博客:https://www.itqaq.com

1. 使用方法

简单示例

// 返回数组
Upload::putFile('磁盘', '文件字段域', '目录名');
Upload::putFile('public', 'img');
Upload::putFile('public', 'img', 'thumb');

上传成功上传失败 时的返回值

2. 文件上传封装类

<?php

// 本文件放在TP6.0.*的extend目录下
// extend/Upload.php

use think\facade\Config;
use think\facade\Filesystem;
use think\exception\ValidateException;

/**
 * 文件上传封装
 * @author   liang
 * @datetime 2020-07-01
 */
class Upload
{
	/**
	 * 执行文件上传
	 * @param  string $disks 磁盘名称
	 * @param  string $field 字段名
	 * @param  string $dir   文件存放目录名,默认和字段名相同
	 * @return array         文件上传结果数组
	 */
	public static function putFile(string $disks = '', string $field = '', string $dir = '')
	{
		// 此时也可能报错
		// 比如上传的文件过大,超出了配置文件中限制的大小
		try {
			$file = request()->file($field);
		} catch (\think\Exception $e) {
			return self::_rtnData(false, self::_languageChange($e->getMessage()));
		}

		// 确定使用的磁盘
		$disks = $disks ?: Filesystem::getDefaultDriver();
		// 文件存放目录名称
		$dirname  = $dir ?: $field;
		// 从存放目录开始的存放路径
		$savename = Filesystem::disk($disks)->putFile($dirname, $file);
		// 完整路径
		$path     = Filesystem::getDiskConfig($disks, 'url') . '/' . str_replace('\\', '/', $savename);

		// 返回上传成功时的数组
		return self::_rtnData(true, '上传成功', $path);
	}

	/**
	 * 英文转为中文
	 */
	private static function _languageChange($msg)
	{
		$data = [
			// 上传错误信息
			'unknown upload error'                       => '未知上传错误!',
			'file write error'                           => '文件写入失败!',
			'upload temp dir not found'                  => '找不到临时文件夹!',
			'no file to uploaded'                        => '没有文件被上传!',
			'only the portion of file is uploaded'       => '文件只有部分被上传!',
			'upload File size exceeds the maximum value' => '上传文件大小超过了最大值!',
			'upload write error'                         => '文件上传保存错误!',
		];

		return $data[$msg] ?? $msg;
	}

	/**
	 * 文件上传返回结果数组
	 */
	private static function _rtnData(bool $result, $msg = null, $path = null)
	{
		// 过滤掉值为null的数组元素
		return array_filter(compact('result', 'msg', 'path'), function($v){
			return !is_null($v);
		});
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值