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

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

 一、创建表

        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位之间'
    ];
}

六、提前说明

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/906938.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS NEXT 应用开发实战(九、知乎日报项目详情页实现详细介绍)

在本篇博文中&#xff0c;我们将探讨如何使用 HarmonyOS Next 框架开发一个知乎日报的详情页&#xff0c;逐步介绍所用到的组件及代码实现。知乎日报是个小巧完整的小项目&#xff0c;这是一个循序渐进的过程&#xff0c;适合初学者和有一定开发经验的工程师参考。 1. 项目背景…

数据结构之链式结构二叉树的实现(初级版)

本文内容将主会多次用到函数递归知识&#xff01;&#xff01;&#xff01; 本节内容需要借助画图才能更好理解&#xff01;&#xff01;&#xff01; 和往常一样&#xff0c;还是创建三个文件 这是tree.h #pragma once #include<stdio.h> #include<stdlib.h> …

数据结构(Java)—— 认识泛型

1. 包装类 在学习泛型前我们需要先了解一下包装类 在 Java 中&#xff0c;由于基本类型不是继承自 Object &#xff0c;为了在泛型代码中可以支持基本类型&#xff0c; Java 给每个基本类型都对应了一个包装类型。 1.1 基本数据类型和对应的包装类 基本数据类型包装类byteByt…

LSTM模型改进实现多步预测未来30天销售额

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【BiLSTM模型实现电力数据预测】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实…

使用带有令牌认证的 Jupyter Notebook 服务器

当你不想在默认浏览器打开Jupyter Notebook,但是在其他浏览器打开http://localhost:8890/lab或者http://localhost:8889/tree&#xff0c;却显示 Token authentication is enabled&#xff0c;如下图 可以按以下步骤操作&#xff1a; 获取令牌&#xff1a;在启动 Jupyter Note…

软考(中级-软件设计师)数据库篇(1101)

第6章 数据库系统基础知识 一、基本概念 1、数据库 数据库&#xff08;Database &#xff0c;DB&#xff09;是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储&#xff0c;具有较小的冗余度、较高的数据独立性和扩展…

【java】java的基本程序设计结构06-运算符

运算符 一、分类 算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符 1.1 算术运算符 操作符描述例子加法 - 相加运算符两侧的值A B 等于 30-减法 - 左操作数减去右操作数A – B 等于 -10*乘法 - 相乘操作符两侧的值A * B等于200/除法 - 左操作数除以右操作数B /…

躺平成长-代码开发(07)-利用kimi帮助自己写代码

开源竞争&#xff1a; 开源竞争&#xff08;当你无法彻底掌握技术的时候&#xff0c;就去开源这个技术&#xff0c;让更多人了解这个技术&#xff0c;随着越来越多的人了解这个技术&#xff0c;就会培养出更多的技术依赖&#xff0c;让更多的人帮助你们完善你的技术依赖&#x…

基于javaweb(springboot+mybatis)网站建设服务管理系统设计和实现以及文档报告设计

基于javaweb(springbootmybatis)网站建设服务管理系统设计和实现以及文档报告设计 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取…

时间序列预测(十)——长短期记忆网络(LSTM)

目录 一、LSTM结构 二、LSTM 核心思想 三、LSTM分步演练 &#xff08;一&#xff09;初始化 1、权重和偏置初始化 2、初始细胞状态和隐藏状态初始化 &#xff08;二&#xff09;前向传播 1、遗忘门计算&#xff08;决定从上一时刻隐状态中丢弃多少信息&#xff09; 2、…

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场操作指导(一)

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场操作指导(一) Sigrity Power SI的3D-EM Full Wave Extraction模式是Power SI的3D全波提取工具,相比于2D提取,3D全波提取的结果更为精确,且支持设置跨平面的port,也就是lump port,这…

rhce:web服务器

web服务器简介 服务器端&#xff1a;此处使用 nginx 提供 web 服务&#xff0c; RPM 包获取&#xff1a; http://nginx.org/packages/ /etc/nginx/ ├── conf.d #子配置文件目录 ├── default.d ├── fastcgi.conf ├── fastcgi.conf.default ├── fastcgi_params #用…

jenkins国内插件源

Jenkins是一个开源的持续集成和持续部署&#xff08;CI/CD&#xff09;工具, 可以大大减轻部署的工作量, 但是jenkins作为一个国外的软件, 在国内下载插件会很麻烦, 因此我们可以将其换为国内源 更换步骤 替换国内插件下载地址 以linux为例 首先, jenkins初始化完成之后不会…

DiffusionDet: Diffusion Model for Object Detection—用于对象检测的扩散模型论文解析

DiffusionDet: Diffusion Model for Object Detection—用于对象检测的扩散模型论文解析 这是一篇发表在CVPR 2023的一篇论文&#xff0c;因为自己本身的研究方向是目标跟踪&#xff0c;之前看了一点使用扩散模型进行多跟踪的论文&#xff0c;里面提到了DiffusionDet因此学习一…

idea 配置tomcat 服务

选择tomcat的安装路径 选到bin的文件夹的上一层就行

opencv 图像预处理

图像预处理 ​ 在计算机视觉和图像处理领域&#xff0c;图像预处理是一个重要的步骤&#xff0c;它能够提高后续处理&#xff08;如特征提取、目标检测等&#xff09;的准确性和效率。OpenCV 提供了许多图像预处理的函数和方法&#xff0c;以下是一些常见的图像预处理操作&…

初始JavaEE篇——多线程(4):wait、notify,饿汉模式,懒汉模式,指令重排序

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 wait、notify 方法 多线程练习 单例模式 饿汉模式 懒汉模式 指令重排序 wait、notify 方法 wait 和 我们前面学习的sleep…

新工具可绕过 Google Chrome 的新 Cookie 加密系统

一位研究人员发布了一款工具&#xff0c;用于绕过 Google 新推出的 App-Bound 加密 cookie 盗窃防御措施并从 Chrome 网络浏览器中提取已保存的凭据。 这款工具名为“Chrome-App-Bound-Encryption-Decryption”&#xff0c;由网络安全研究员亚历山大哈格纳 (Alexander Hagenah…

JavaSE笔记4】API、包、String类、Object类

目录 一、API 二、包 2.导入不同包下的同名程序 三、String 1. String类是什么&#xff1f; 2. 如何创建String对象?(常用的四种方法&#xff09; 3. String API a. 遍历字符串 b. 判断字符串内容是否相等&#xff1a; c. 截取子串 d. 替换部分内容 e. 匹配子串 f. 匹配开头字…

【含文档】基于ssm+jsp的超市订单后台理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 该系统有两个主…