找回密码
 立即注册
查看: 67|回复: 0

[教程] ThinkPHP8 获取上传文件属性及自定义附件大小格式类型验证及上传处理

[复制链接]

30

金豆

170

黑豆

2

精华

管理员

站长QQ:515138

主题
124
回帖
7
在线时间
76 小时
注册时间
2024-2-3
最后登录
2024-11-14
发表于 2024-7-18 11:09:03 | 显示全部楼层 |阅读模式
ThinkPHP8 获取上传文件属性及自定义附件大小格式类型验证及上传处理

获取文件属性方法
1.获取文件大小(单位bytes)
$file->getSize();
2.获取文件后缀
$file->getOriginalExtension();
3.获取文件上传路径
$file->getPathname();
4.获取文件名称
$file->getOriginalName();
5.上传文件
$file->move($filePath, $newname);
参数1:要上传的路径

参数2:文件新名称

6.获取上传服务器错误
需要在请求接收文件时捕获异常

try {
    $file = request()->file('file');
} catch (\Exception $e) {
    print_r($e->getMessage());
}


封装上传方法实现
代码如下
**
* 生成一个随机名字(当前的年月日时分秒+随机数字+后缀名)
* @return string 文件的新名字
*/
protected function randName()
{
    // 1, 生成文件的时间部分
    $name = date('YmdHis');
    // 2, 加上随机产生的6位数
    $str = '0987653214';
    for ($i = 0; $i < 6; $i++) {
        $name .= $str[mt_rand(0, strlen($str) - 1)];
    }
    return $name;
}


/**
* 实现文件上传
* @param object $file 上传的文件的对象信息
* @param string $path 文件上传的目录
* @return string|array 上传失败返回原因 成功返回文件的新名字数组
*/
public function move($file, $path)
{

    try {
        // 判断逻辑错误
        $maxSize = 80 * 1024;
        if ($file->getSize() > $maxSize) {
            return '上传失败,超出了文件限制的大小!';
        }

        // 判断文件类型
        $ext = strtolower($file->getOriginalExtension());
        if (!in_array($ext, ['png', 'jpg', 'jpeg', 'pdf', 'webp'], true)) {
            // 非法的文件类型
            return '上传的图片的类型不正确,允许的类型有:' . implode(',', $this->allowed_ext);
        }

        // 文件原名称(带扩展类型)
        $originalName = $file->getOriginalName();
        
        // 得到文件随机名称和相应文件夹
        $newname = $this->randName();
        $newname = $newname . '.' . $ext;
        $filePath = $this->rootPath . $path . '/' . date('Ymd') . '/';
        
        $file->move($filePath, $newname);
        return ['path' => $filePath . $newname];
    } catch (\Exception $e) {
        return $e->getMessage() . $e->getLine();
    }
}
调用方法

$name = $this->move($file, 'tp');
print_r($name);die;

QQ|网站地图|Archiver|手机版|金黑 ( 粤ICP备2021124338号 )

网站建设,微信公众号小程序制作,商城系统开发,高端系统定制,app软件开发,智能物联网开发,直播带货系统等

Powered by Www.Jinhei.Cn

Copyright © 2013-2024 深圳市金黑网络技术有限公司 版权所有

快速回复 返回顶部 返回列表