当前位置: 首页 > article >正文

群控系统服务端开发模式-应用开发-上传工厂开发

        现在的文件、图片等上传基本都在使用oss存储。而现在常用的oss存储有阿里云、腾讯云、七牛云、华为云等,但是用的最多的还是前三种。而我主要封装的是本地存储、阿里云存储、腾讯云存储、七牛云存储。废话不多说,直接上传设计图及说明,就一目了然咯。     

一、上传父抽象类开发

        在根目录下extend文件夹里创建文件夹并命名为Upload,然后创建上传父抽象类文件并命名为UploadHandle。切记,本类里一定要加上abstract关键字,不仅要类加上,方法也要加上。代码如下:

<?php
/**
 * 上传父抽象类
 * User: 龙哥 三年风水
 * Date: 2024/11/2/0002
 * Time: 17:47
 */
namespace Upload;
abstract class UploadHandle
{
    /**
     * 上传操作
     * @ param $object 加密后的文件
     * @ param $filePath 临时存放的文件路径
     * @ return mixed
     */
    abstract function uploadFile($object, $filePath);

    /**
     * 删除操作
     * @ param $object 具体的文件地址
     * @ return mixed
     */
    abstract function deleteFile($object);
}

二、上传文件工厂控制类

        在根目录下extend文件夹里创建文件夹并命名为Upload,然后创建上传文件工厂控制类并命名为UploadFactory。代码如下:

<?php
/**
 * 上传文件工厂控制类
 * User: 龙哥 三年风水
 * Date: 2024/11/2/0002
 * Time: 18:06
 */
namespace Upload;
use Error\BaseError;
use app\model\param\Upload as UploadModel;
use Upload\channel\LocalUpload;
use Upload\channel\AliyunUpload;
use Upload\channel\TencentUpload;
use Upload\channel\QiniuyunUpload;
class UploadFactory
{
    public static $instance=null;//缓存实例
    protected $uploadType = 0;通道类型
    protected $channel = [];//通道参数
    /**
     * 初始化
     * User: 龙哥·三年风水
     * Date: 2024/4/8
     * Time: 15:26
     * UploadFactory constructor.
     */
    public function __construct($channel){
        $res = UploadModel::dataFind(['id' => 1],'upload_type,example_name,access_key,secret_key,bucket_name,domain_name');
        if(empty($res))throw new BaseError("上传通道参数未配置",50000,200);
        $this->uploadType = $res['upload_type'];
        if($this->uploadType != 1){
            $this->channel = [
                "name"          =>  $res['name'],
                "access_key"    =>  $res['access_key'],
                "secret_key"    =>  $res['secret_key'],
                "bucket"        =>  $res['bucket'],
                "domain_name"   =>  $res['domain_name']
            ];
        }
        return $this->getUploadHandle();
    }

    /**
     * 调用上传通道
     * @ return null|AliyunUpload|LocalUpload|QiniuyunUpload|TencentUpload
     */
    private function getUploadHandle(){
        switch ((int)$this->uploadType){
            case 1:
                self::$instance = new LocalUpload();
                break;
            case 2:
                self::$instance = new AliyunUpload($this->channel);
                break;
            case 3:
                self::$instance = new TencentUpload($this->channel);
                break;
            case 4:
                self::$instance = new QiniuyunUpload($this->channel);
                break;
            default:
                self::$instance = null;
                throw new BaseError("未设置任何文件上传通道",50000,200);
                break;
        }
        return self::$instance;
    }
}

三、提前说明

        其实这个上传文件工厂控制类还是可以优化的,可以改成自动识别上传工厂类,不需要使用switch方法。明天将实现四个上传工厂类。


http://www.kler.cn/a/376242.html

相关文章:

  • 利用LangChain与LLM打造个性化私有文档搜索系统
  • LocalDate 类常用方法详解(日期时间类)
  • MongoDB 6.0 主从复制配置
  • leetcode hot100【LeetCode 279. 完全平方数】java实现
  • 凸极式发电机的相量图分析和计算,内功率因数角和外功率因数角和功角的定义。
  • 【Java SE】类型转换
  • PySpark和Hadoop
  • 前端加密解密
  • 基于springboot的社区团购系统设计与实现
  • 【数据结构-邻项消除】力扣2216. 美化数组的最少删除数
  • [STM32]从零开始的IIC协议讲解与设备驱动
  • 【周末推荐】Windows无缝连接iPhone
  • HCIA(ACL)
  • 如何看待长周期项目?
  • GraphQL 与 Elasticsearch 相遇:使用 Hasura DDN 构建可扩展、支持 AI 的应用程序
  • uaGate SI——实现OT与IT的安全连接
  • [Ubuntu] 文件/目录权限更改
  • 【零售和消费品&存货】超市购物车商品检测系统源码&数据集全套:改进yolo11-DySnakeConv
  • C++ [项目] 躺平发育
  • java stream流的使用
  • 使用 firewall-cmd 管理 Linux 防火墙
  • 飞牛NAS docker compose环境下自建远程桌面服务:rustdesk
  • 深度学习:交叉熵损失(Cross Entropy Loss)
  • MySQL、MongoDB 和 SQL Server 的区别
  • cmake编译特性 相关设置函数(细节)
  • Docker | 常用的容器container命令