关注前端开发
HTML5、CSS3、Javascript

简单封装一个ThinkPHP6 上传文件类,带文件后缀验证,大小限制。

工具类:

<?php
// 文件路径:app\utils\FileUpload.php

namespace tools;

use think\Validate;

class FileUpload
{
    private $maxSize; // 最大文件大小,单位字节
    private $allowedExtensions; // 允许的文件后缀

    public function __construct($maxSize = 102428800, $allowedExtensions = ['jpg', 'jpeg', 'png', 'gif','pdf'])
    {
        $this->maxSize = $maxSize;
        $this->allowedExtensions = $allowedExtensions;
    }

    public function upload($file, $destination)
    {
        $validator = new Validate();
        $validator->rule('file', 'fileSize:' . $this->maxSize)
            ->rule('file', 'fileExt:' . implode(',', $this->allowedExtensions));

        if (!$validator->check(['file' => $file])) {
            return ['status' => false, 'message' => $validator->getError()];
        }

        // 如果文件夹不存在,则创建文件夹
        if (!is_dir($destination)) {
            mkdir($destination, 0777, true);
        }

        // 生成唯一的文件名
        $extension = strtolower($file->extension());
        $fileName = md5(uniqid()) . '.' . $extension;

        // 移动文件到目标路径
        $file->move($destination, $fileName);

        return ['status' => true, 'message' => '文件上传成功', 'file_name' => $fileName];
    }
}

 

调用:

 

$file = $this->request->file('file');
$upload = new FileUpload(102428800, ['pdf']);
$result = $upload->upload($file, 'upload/document/pdf'); // 上传到uploads文件夹

if ($result['status']) {
    $this->success("上传成功!",'/upload/document/pdf/'.$result['file_name']);
} else {
    $this->error('文件上传失败:' . $result['message']);
}

 

 

转载请注明出处:有点迷惘|技术blog » 简单封装一个ThinkPHP6 上传文件类,带文件后缀验证,大小限制。

相关推荐

  • 暂无文章