ThinkPHP6 获取上传文件属性及自定义文件验证及上传处理

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

TP^6.1文件上传有封装方法如果不想用封装的自定义上传怎么获取文件属性呢

目录

TP文件信息

打印上传文件信息

获取文件属性方法

1.获取文件大小单位bytes

2.获取文件后缀

3.获取文件上传路径

4.获取文件名称

5.上传文件

6.获取上传服务器错误

封装上传方法实现

代码如下

调用方法

返回结果

总结


TP文件信息

$file变量是一个\think\File对象你可以获取相关的文件信息

支持使用SplFileObject类的属性和方法SplFileObject是php环境中的类

还有TP底层封装的UploadedFile类也有一些获取文件信息的属性和方法。

打印上传文件信息

think\file\UploadedFile Object
(
    [test:think\file\UploadedFile:private] => 
    [originalName:think\file\UploadedFile:private] => 2.jpg
    [mimeType:think\file\UploadedFile:private] => application/octet-stream
    [error:think\file\UploadedFile:private] => 0
    [hash:protected] => Array
        (
        )

    [hashName:protected] => 
    [pathName:SplFileInfo:private] => C:\Windows\php1A92.tmp
    [fileName:SplFileInfo:private] => php1A92.tmp
)

获取文件属性方法

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;

返回结果

./uploads/tp/20230201/20230201142943441364.jpg

总结

这样自己利用底层方法简单实现上传文件验证、保存就实现了。同样一个功能实现的方法有很多种看你习惯使用哪个了。

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: php

“ThinkPHP6 获取上传文件属性及自定义文件验证及上传处理” 的相关文章

PHP MySQL 读取数据1年前 (2023-02-02)
Centos8中安装配置php1年前 (2023-02-02)
PHP Mail 函数1年前 (2023-02-04)
PHP 杂项 函数1年前 (2023-02-05)
PHP 5 String 函数1年前 (2023-02-08)