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

群控系统服务端开发模式-应用开发-上传配置功能开发

        下面直接进入上传配置功能开发,废话不多说。

 一、创建表

        1、语句

CREATE TABLE `cluster_control`.`nc_param_upload`  (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '编号',
  `upload_type` tinyint(1) UNSIGNED NOT NULL COMMENT '上传类型 1:本站 2:阿里云 3:腾讯云 4:七牛云',
  `checked_images` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '图片类型',
  `checked_videos` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '视频类型',
  `checked_filedocs` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文件类型',
  `upload_number` smallint(5) UNSIGNED NOT NULL DEFAULT 0 COMMENT '文件大小',
  `example_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '实例名称',
  `access_key` varchar(100) NULL COMMENT 'accessKey',
  `secret_key` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 'secretKey',
  `bucket_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '空间名称',
  `domain_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 'Bucket域名',
  `update_time` datetime(0) NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '文件上传配置';

        2、表结构

二、路由配置

        因它是固定数据,所以只有读取与保存这两个接口。在根目录下的route文件夹中的app.php文件中,具体如下代码:

    //上传配置
    Route::post('upload/get_info','param.Upload/getInfo');// 获取上传配置参数数据
    Route::post('upload/save_info','param.Upload/saveInfo');// 保存上传配置参数数据

三、控制层开发

        在根目录下的app文件夹下的controller文件夹中,创建文件夹并命名param,在param文件夹中接着创建上传参数控制器并命名为Upload。具体代码如下:

<?php
/**
 * 上传参数控制管理
 * User: 龙哥·三年风水
 * Date: 2024/11/1
 * Time: 14:38
 */
namespace app\controller\param;
use app\controller\Base;
use app\model\param\Upload as UploadModel;
class Upload extends Base
{
    // 获取上传参数
    public function getInfo(){
        if($this->request->param('id') !== 1)return err('请求参数错误');//验证请求参数
        $resPUpload = UploadModel::dataFind(['id' => 1],'upload_type,checked_images,checked_videos,checked_filedocs,upload_number,example_name,access_key,secret_key,bucket_name,domain_name');
        $resPUpload['upload_max_filesize'] = (int)ini_get('upload_max_filesize');
        return succ('操作成功',$resPUpload);
    }

    // 保存上传参数
    public function saveInfo(){
        $param = $this->request->param();
        $validate = new \app\validate\param\Upload;
        if(!$validate->check($param)) return err($validate->getError());
        $checked_images = implode(',', $param['checked_images']);
        $checked_videos = implode(',', $param['checked_videos']);
        $checked_filedocs = implode(',', $param['checked_filedocs']);
        UploadModel::save([
            'upload_type' => $param['upload_type'],
            'checked_images' => $checked_images,
            'checked_videos' => $checked_videos,
            'checked_filedocs' => $checked_filedocs,
            'upload_number' => $param['upload_number'],
            'example_name' => $param['upload_type'] > 1 ? $param['example_name'] : '',
            'access_key' => $param['upload_type'] > 1 ? $param['access_key'] : '',
            'secret_key' => $param['upload_type'] > 1 ? $param['secret_key'] : '',
            'bucket_name' => $param['upload_type'] > 1 ? $param['bucket_name'] : '',
            'domain_name' => $param['upload_type'] > 1 ? $param['domain_name'] : ''
        ],[['id','=',1]]);
        return succ('操作成功', []);
    }
}

四、数据层开发

        在根目录下app文件夹下model文件夹中创建文件夹并命名为param,在param文件夹中创建上传参数数据文件并命名为Upload。具体代码如下:

<?php
/**
 * 上传参数数据管理
 * User: 龙哥·三年风水
 * Date: 2024/11/1
 * Time: 14:42
 */
namespace app\model\param;
use app\model\Tools;
use Redis\Redis;
class Upload extends Tools
{
    protected static $name = 'param_upload';
    protected static $connection = 'mysql';
    protected $pk = 'id';
    protected static $unsetField = ['update_time','create_time','status'];

    //获取单条数据
    public static function dataFind($where = [], $field='*', $unsetField=[]){
        $fieldL = 0; //预防字段少于数据库字段等情况下,加入等级进行区分。保障Redis存储最高性
        if($field == '*') {
            $res = Redis::select(config('cache.stores.redis.other_db'))->hgetall('param_upload1');
        }else{
            $res = Redis::select(config('cache.stores.redis.other_db'))->hmget('param_upload1',explode(',',$field));
        }
        foreach($res as $v){
            if(empty($v)){
                $fieldL = 1;
                break;
            }
        }
        if($fieldL === 1){
            $fields = $field;
            if($fieldL === 1)$fields = '*';
            $res = self::dataFinds(self::$name, $where, $fields, true, self::$connection);
            if(count($unsetField) > 0){//如果单独添加过滤数据,则优先并入数据
                foreach($unsetField as $v){
                    array_push(self::$unsetField,$v);
                }
            }
            if(!empty(self::$unsetField)){//主动过滤修改时间等状态
                foreach(self::$unsetField as $v){
                    if(isset($res[$v]))unset($res[$v]);
                }
            }
            //过滤好了之后存入Redis
            Redis::select(config('cache.stores.redis.other_db'))->hmset('param_upload1',$res);
        }
        if($field != '*'){//根据需要,将需要的字段过滤返回
            $data = [];
            $list = explode(',',$field);
            foreach($list as $k=>$v){
                if($fieldL === 1){
                    $data[$v] = $res[$v];
                }else{
                    $data[$v] = $res[$k];
                }
            }
            $res = $data;
        }
        return $res;
    }

    //保存数据
    public static function save($data, $where = [], $unsetField=[]){
        self::dataSaves(self::$name, $data, $where, self::$connection);
        if(count($unsetField) > 0){//如果单独添加过滤数据,则优先并入数据
            foreach($unsetField as $v){
                array_push(self::$unsetField,$v);
            }
        }
        if(!empty(self::$unsetField)){//主动过滤修改时间等状态
            foreach(self::$unsetField as $v){
                if(isset($data[$v]))unset($data[$v]);
            }
        }
        //过滤好了之后存入Redis
        Redis::select(config('cache.stores.redis.other_db'))->hmset('param_upload1',$data);
    }
}

五、验证层开发

        在根目录下app文件夹下validate文件夹中创建文件夹并命名为param,在param文件夹中创建图片格式验证文件并命名为Upload。具体代码如下:

<?php
/**
 * 上传参数验证管理
 * User: 龙哥·三年风水
 * Date: 2024/11/1
 * Time: 14:54
 */
namespace app\validate\param;
use app\validate\Tools;
class Upload extends Tools
{
    protected $rule = [
        'id' => 'require|number',
        'upload_type' => 'require|number',
        'checked_images' => 'require|array',
        'checked_videos' => 'require|array',
        'checked_filedocs' => 'require|array',
        'upload_number' => 'require|number|between:1,300',
        'example_name' => 'requireIf:upload_type,2,4|url|length:3,120',
        'access_key' => 'requireIf:upload_type,2,4|length:3,120',
        'secret_key' => 'requireIf:upload_type,2,4|length:3,120',
        'bucket_name' => 'requireIf:upload_type,2,4|length:3,120',
        'domain_name' => 'url|length:3,120'
    ];
    protected $message = [
        'id.require' => '编号必须填写',
        'id.number' => '编号必须是数字类型',
        'upload_type.require' => '上传类型必须选择',
        'upload_type.number' => '上传类型必须是数字类型',
        'checked_images.require' => '图片类型必须选择',
        'checked_images.array' => '图片类型必须是数组',
        'checked_videos.require' => '视频类型必须选择',
        'checked_videos.array' => '视频类型必须是数组',
        'checked_filedocs.require' => '文件类型必须选择',
        'checked_filedocs.array' => '文件类型必须是数组',
        'upload_number.require' => '文件上传大小必须填写',
        'upload_number.number' => '文件上传大小必须是数字',
        'upload_number.between' => '文件上传大小必须是1到300之间',
        'example_name.requireIf' => '实例名称必须填写',
        'example_name.url' => '实例名称必须是url类型',
        'example_name.length' => '实例名称必须是3到120位之间',
        'access_key.requireIf' => 'accessKey必须填写',
        'access_key.length' => 'accessKey必须是3到120位之间',
        'secret_key.requireIf' => 'secretKey必须填写',
        'secret_key.length' => 'secretKey必须是3到120位之间',
        'bucket_name.requireIf' => '空间名称必须填写',
        'bucket_name.length' => '空间名称必须是3到120位之间',
        'domain_name.url' => 'Bucket域名必须是url类型',
        'domain_name.length' => 'Bucket域名必须是3到120位之间'
    ];
}

六、提前说明

        在本功能开发的同时,我发现之前开发的系统配置文件命名及存放的位置不合理,所以需要修改一下前面开发的文档。明天将开发系统配置及文件上传工厂。


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

相关文章:

  • “檢測到不安全的代理”怎麼修復?
  • 信创源代码加密的答案:信创沙箱
  • uni-app 统一请求处理 请求拦截器 响应拦截器 请求封装
  • 三.统一异常Exception拦截处理
  • k8s dashboard可视化操作界面的安装
  • C/C++圣诞树
  • 计算机毕业设计 | springboot+vue电影院会员管理系统 影院后台管理(附源码)
  • Python 实现深度学习模型预测控制--预测模型构建
  • ISO 26262与ISO 21434:汽车安全领域的双重保障与交汇探索
  • 开启TikTok直播的全攻略:从网络条件到设备准备
  • API接口开放与安全管控 - 原理与实践
  • 城市交通场景分割系统:Web前端可视化
  • 汽车车辆控制单元SRAM存储解决方案
  • elasticsearch 8.x 插件安装(三)之拼音插件
  • 两个有序链表序列的交集
  • mosh-react-course
  • 计算机毕业设计django+大模型租房推荐系统 租房可视化 租房大屏可视化 租房爬虫 spark 58同城租房爬虫 房源推荐系统
  • 在本地电脑部署属于你的AI大模型
  • 手敲Webpack 5:React + TypeScript项目脚手架搭建实践
  • Java面试题十四
  • C++中的依赖注入
  • 记录一次企业外部通过ssh 连接数据库的事DBeaver
  • Apache Solr 身份认证绕过导致任意文件读取漏洞复现(CVE-2024-45216)
  • Apache paimon表管理
  • 稀土抗菌剂:食品包装中的安全保障
  • Ubuntu 22.04 的Python3.11.8 安装