群控系统服务端开发模式-应用开发-上传配置功能开发
下面直接进入上传配置功能开发,废话不多说。
一、创建表
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]);}}//过滤好了之后存入RedisRedis::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]);}}//过滤好了之后存入RedisRedis::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位之间'];
}
六、提前说明
在本功能开发的同时,我发现之前开发的系统配置文件命名及存放的位置不合理,所以需要修改一下前面开发的文档。明天将开发系统配置及文件上传工厂。
相关文章:
群控系统服务端开发模式-应用开发-上传配置功能开发
下面直接进入上传配置功能开发,废话不多说。 一、创建表 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&a…...
stm32——GPIO开发
目录 1、什么是GPIO 2、GPIO的作用 3、GPIO的基本结构 4、GPIO引脚的基本结构 5、GPIO端口模式的配置 1. 输入浮空(Input Floating) 2. 输入上拉(Input Pull-Up) 3. 输入下拉(Input Pull-Down) 4. …...
layui 自定义验证单选框必填
对于输入框类型必填验证,只需要在 input 输入框加入 lay-verify "required" 即可。但对于单选按钮这种特殊的该怎么办呢?layui 为我们提供了自定义验证。 1. 在单选按钮上添加自定义验证的名称 2. 验证规则如下 // 单选框自定义验证form.ve…...
Spring 设计模式之策略模式
Spring 设计模式之策略模式 策略模式构成部分java举例 策略模式 策略模式:允许定义一系列算法,并将每一个算法封装起来,使它们可以互相替换,且算法的变化可以独立于使用它们的客户端。 构成部分 Context(上下文&…...
苹果开发 IOS 证书生成步骤
前提条件 你手上有一台 Macbook你的苹果账号已被添加到开发人员中 证书创建步骤 打开 XCode 直接生成 p12证书生成后,就可在苹果开发者管理界面中看到你的证书记录登录苹果开发中心,创建 profiles 文件,并下载以上步骤即可,就这…...
DDR2 SDRAM(五)初始化
因为DDR2本质上只是更高级的一种SRAM,底层操作原理和SRAM是一样的,所以很多基础的东西就不再赘述了。 一、原理 在初始化之前,DDR2芯片需要先上电,芯片有多个需要提供的电压,其大小和顺序也有要求,这部分…...
Python工具箱系列(五十七)
图像分割与人脸识别 众所周知图像是由若干有意义的像素组成的,图像分割作为计算机视觉的基础,对具有现有目标和较精确边界的图像进行分割,实现在图像像素级别上的分类任务。图像分割可分为语义分割和实例分割两类,区别如下&#x…...
数据智能驱动金融策略优化:民锋智能分析技术的应用
在现代金融市场中,数据分析与智能化技术的结合为投资策略带来了全新机遇。民锋以智能分析技术为核心,帮助投资者在复杂的市场环境中做出高效决策。本文将深入探讨民锋智能分析技术如何驱动策略优化,为投资者带来更加智能化的支持。 #### 一、…...
1009:带余除法
【题目描述】 给定被除数和除数,求整数商及余数。此题中请使用默认的整除和取余运算,无需对结果进行任何特殊处理。 【输入】 一行,包含两个整数,依次为被除数和除数(除数非零),中间用一个空格隔…...
Jmeter实际应用
环境准备 JDK1.8Jmeter 5.6.3 下载地址Jmeter 插件 下载地址 放到lib/ext下 常用命令 # 启动 sh jmeter# 集群模式下启动节点,不启动用不了集群 sh jmeter-server#生成ssl需要的证书, 这里会要求输入个密码,是要在jmeter中用的 keytool -import -ali…...
C++基础(11.AVL树的实现)
目录 AVL的概念: AVL树的实现: AVL树的结构: AVL树的插⼊: 平衡因⼦更新: 旋转: AVL树的其他功能: AVL树平衡检测: 测试代码*2: 源代码: KV结构: 源代码: AVL…...
c# 抽象方法 虚函数 使用场景
在C#中,抽象方法(abstract method)和虚函数(virtual method)都是用于实现多态性(polymorphism)的重要特性,但它们在使用上有一些关键的区别和各自的用途。 抽象方法(Abs…...
大数据安全方案 验证
一、背景 文档用于记录配置 Kerberos 和 Ranger 后,对 HDFS、Hive 认证和鉴权的功能测试。 二、Kerberos 验证 2.1、验证功能 1,HDFS 认证 2.1.1、访问 HDFS Kerberos 验证前,访问 HDFS 失败。 Kerberos 验证后,访问 HDFS 成…...
电脑软件:推荐一款免费且实用的电脑开关机小工具
目录 一、软件简介 二、软件功能 三、软件特点 四、使用说明 五、软件下载 今天给大家推荐一款免费且实用的电脑开关机小工具KShutdown,有需要的朋友可以下载试一下! 一、软件简介 KShutdown是一款精巧且实用的定时自动关机小工具,对于…...
php反序列化靶场随笔分析
项目地址:github.com/mcc0624/php_ser_Class 推荐使用docker部署:https://hub.docker.com/r/mcc0624/ser/tags 前面讲了以下php基础,我们直接从class6开始实验 class6 访问页面,传一个序列化的字符串,php代码将其反…...
动态规划 - 编辑距离
115. 不同的子序列 困难 给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 10^9 7 取模。 算法思想:利用动态规划,分s[i - 1] 与 t[j - 1]相等,s[i - 1] 与 t[j - 1] 不相等两种情况具…...
力扣——113. 路径总和
113. 路径总和 II 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], t…...
C02S04-Ubuntu基本使用
一、Ubuntu初始配置 1. 使用root用户 Ubuntu系统默认只能使用普通用户,要想使用root用户,需要先设置root用户密码。 进入终端,配置root用户密码。按照提示输入密码。 sudo passwd root配置完成后,执行下面的密码,切换…...
C语言 | Leetcode C语言题解之第525题连续数组
题目: 题解: struct HashTable {int key, val;UT_hash_handle hh; };int findMaxLength(int* nums, int numsSize) {int maxLength 0;struct HashTable* hashTable NULL;struct HashTable* tmp malloc(sizeof(struct HashTable));tmp->key 0, tm…...
Qml-Transition的使用
Qml-Transition的使用 Transition的概述 Transition:定义了当状态发生改变时应用的动画属性animations : list:(Transition)过渡的动画属性enabled : bool:状态发生变化时,是否使能此过渡(Transition)动画…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
