【云备份】可视化客户端----QT开发➕QT数据库编程

news/2024/10/11 20:54:32/文章来源:https://blog.csdn.net/LHRan_ran_/article/details/142110265

文章目录

  • 一、 需求分析
  • 二、 概念结构设计
  • 三、逻辑结构设计
    • 1. 用户表 (users)
    • 2. 客户端本地文件信息表 (upload_files)
    • 3. 备份记录表 (backup_records)
    • 4. 服务端备份文件信息表 (backup_files)
  • 四、 开发工具
  • 五、具体实现
    • (一) 客户端程序运行演示

一、 需求分析

  1. 意义:
    1.1提供数据安全性:通过远程存储,减少因设备损坏、失窃或自然灾害导致的数据丢失风险。
    1.2高可用性:确保用户可以随时随地访问备份数据,提高业务连续性。
    1.3成本效益:相较于传统备份方式,云备份降低了硬件投资和维护成本。
    1.4自动化管理:简化备份过程,减少人为错误,提高操作效率。

  2. 设计任务
    2.1 用户身份验证:确保只有注册用户能够上传和访问备份数据,多用户只能查看自己的数据。
    2.2 客户端任务:支持用户选择指定文件夹,对该文件夹下文件自动备份。
    2.3 服务端任务:备份客户端上传的文件,支持用户查看,下载文件。
    2.4 多版本备份:支持多个备份版本的存储,以便在数据损坏或误删除时快速恢复。
    2.5易用性与用户界面:设计友好的用户界面,使用户能够方便地进行备份和恢复操作。

  3. 功能模块划分
    在这里插入图片描述

    3.1 支持多用户上传,查看云数据。
    3.2 客户端自动检测指定文件夹,支持将本地文件上传到云端。
    3.3 服务端接收客户端文件,对非热点文件压缩存储,支持用户查看,支持断点续传。
    3.4 提供前端页面,用户提供网页浏览/下载云端文件。
    3.5 使用数据库,存储用户信息,客户端本地文件信息,服务端已备份文件属性信息,备份记录信息。

  4. 预期目标
    多用户可以通过客户端程序选择指定文件夹,客户端程序监测该文件夹下文件,将需要上传的文件上传到云端。服务端接收并保存文件,对非热点文件进行压缩存储,提供前端页面支持用户查看云端数据。

二、 概念结构设计

在这里插入图片描述

三、逻辑结构设计

1. 用户表 (users)

属性名含义类型说明
user_id用户唯一标识符INT主键,自增
user_name用户名VARCHAR(255)唯一,不允许为空
phone_number电话号码VARCHAR(15)唯一,不允许为空
password密码VARCHAR(255)不允许为空
register_date注册日期TIMESTAMP默认当前时间
last_login最后登录时间TIMESTAMP

2. 客户端本地文件信息表 (upload_files)

属性名含义类型说明
upload_id上传文件唯一标识符INT主键,自增
user_id用户唯一标识符INT外键,引用用户表的user_id
file_path文件路径VARCHAR(255)不允许为空
file_etag文件ETag值VARCHAR(255)唯一,格式为’usrID-fName-fSize-FMtime’
复合唯一索引:ukey_user_file(user_id, file_path)

3. 备份记录表 (backup_records)

属性名含义类型说明
file_id备份记录唯一标识符INT主键,自增
user_id用户唯一标识符INT外键,引用用户表的user_id
upload_time文件上传时间TIMESTAMP默认当前时间,不允许为空
file_etag文件ETag值VARCHAR(255)唯一,格式为’usrID-fName-fSize-FMtime’
file_status文件状态ENUM取值范围:‘uploaded’, ‘modified’, ‘deleted’,默认为’uploaded’
在file_status列上建立索引

4. 服务端备份文件信息表 (backup_files)

属性名含义类型说明
backup_id服务端备份文件唯一标识符INT主键,自增
file_id备份记录唯一标识符INT外键,引用备份记录表的file_id
user_id用户唯一标识符INT外键,引用用户表的user_id
zip_path压缩文件路径VARCHAR(255)
backup_path备份文件路径VARCHAR(255)不允许为空
req_download_path请求下载文件的路径VARCHAR(255)不允许为空
file_size文件大小BIGINT不允许为空
is_zipped是否为压缩文件INT默认为0
fileAtime文件访问时间TIMESTAMP不允许为空
fileCtime文件创建时间TIMESTAMP不允许为空
fileMtime文件修改时间TIMESTAMP不允许为空
created_at创建时间TIMESTAMP默认当前时间

四、 开发工具

  1. 开发环境
软件名称类型版本号
Qt Creator开发工具4.11.1
Visual Studio Code开发工具1.93.0
Navicat数据库客户端16.3.7
  1. 运行支撑环境
环境描述版本
Linux (Ubuntu)用于部署和运行服务端20.04.6 LTS
MySQL数据存储与管理8.0.39-0ubuntu0.20.04.1
Windows部署和运行云备份客户端22631.4112

五、具体实现

(一) 客户端程序运行演示

  1. 程序运行前 读取数据库信息到内存

在这里插入图片描述

  1. 用户输入账号 判断是否存在

在这里插入图片描述
在这里插入图片描述

  1. 新用户需要注册,注册后添加新记录。

在这里插入图片描述

通过控制用户输入数据的合法性来保证向数据库插入合法的数据。
在这里插入图片描述

注册成功后添加新记录。
在这里插入图片描述

  1. 用户登录,登录后更新登录时间。

在这里插入图片描述
在这里插入图片描述

  1. 进入主界面后 选择备份文件夹

在这里插入图片描述

  1. 监视指定文件夹

当有新文件新增,客户端调试信息:
在这里插入图片描述

服务端调试信息:30s后该文件未被用户下载则压缩存储
在这里插入图片描述

客户端文件列表显示:

在这里插入图片描述

前端页面文件新增:

在这里插入图片描述

当检测到文件更新,更新数据库记录:

在这里插入图片描述

文件被修改后的数据库操作:

在这里插入图片描述

在这里插入图片描述

客户端已上传文件表

在这里插入图片描述

服务端备份文件表

在这里插入图片描述

备份记录表

在这里插入图片描述

  1. 对“修改后的文件”是否需要上传做的处理:文件被修改后且3s内未被再次修改被认定为需要上传,避免持续修改的文件多次频繁上传消耗资源。
    在这里插入图片描述

  2. 客户端搭建http客户端上传文件

在这里插入图片描述

(二) 服务端程序运行演示

  1. 配置文件单例类
    在这里插入图片描述

读取JSON格式数据
在这里插入图片描述
在这里插入图片描述

  1. 数据库单例类 统一向外提供数据库接口

在这里插入图片描述

  1. 程序运行前将数据库数据读至内存
    在这里插入图片描述
    在这里插入图片描述

  2. 调用业务处理模块 处理客户端的上传/查看/下载http请求

在这里插入图片描述
在这里插入图片描述

  1. 将客户端发来的文件保存在本地 并将文件属性信息插入备份文件表
    在这里插入图片描述
    在这里插入图片描述

  2. 处理客户端的查看云端文件请求

根据用户名和密码为该客户显示指定的文件,即每个用户只能看到自己上传的文件。
在这里插入图片描述

  1. 对非热点文件的管理

当一个文件3s内未被下载,则被认定为非热点文件,需要进行压缩存储。
在这里插入图片描述
在这里插入图片描述

同时,更新数据库中压缩标志位
在这里插入图片描述

六、 总结与思考

待优化的问题:

  1. 当新增文件过大,服务端压缩存储耗时较多,改为多线程压缩非热点文件更好。
  2. 用户密码在数据库中使用明文存储,应该加密后存储,使得不能直接从数据库中看到用户密码,保护用户隐私。
  3. 客户端使用QT的信号槽机制监测文件状态变化,使用多线程多连接访问数据库。

优点:

  1. 此项目实现了类似“云盘”的备份系统,提供可视化客户端使得普通用户即可使用。
  2. 提供前端页面供用户查看云端文件,且只有用户名和密码匹配才可查看,使得该用户只能查看自己的文件。
  3. 用户信息,文件备份信息等在数据库中持久化存储,在内存中使用哈希表管理,访问速度快。
  4. 使用较多的知识点:HTTP协议,JSON序列与反序列,压缩文件,热点管理,断点续传,线程

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

如若内容造成侵权/违法违规/事实不符,请联系编程新知网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

校园水电费管理|基于java的校园水电费管理小程序系统 (源码+数据库+文档)

校园水电费管理 目录 基于java的校园水电费管理小程序系统 一、前言 二、系统设计 三、系统功能设计 小程序端 后台功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕…

等待唤醒机制和阻塞队列

1. 等待唤醒机制 由于线程的随机调度,可能会出现“线程饿死”的问题:也就是一个线程加锁执行,然后解锁,其他线程抢不到,一直是这个线程在重复操作 void wait() 当前线程等待,直到被其他线程唤醒 void no…

STM32F407VET6 学习笔记2:定时器、串口、自定义串口打印函数

今日继续学习使用嘉立创购买的 立创梁山派天空星,芯片是 STM32F407VET6 因为已经有学习基础了,所以学习进度十分快,这次也是直接一块学习配置定时器与串口了,文章也愈来愈对基础的解释越来越少了...... 文章提供测试代码讲解、完…

计算机毕业设计选题推荐-项目评审系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

python程序使用nohup后台执行不能实时输出到定向文件的解决方法

问题描述:使用nohup命令后台执行python,但python中print方法打印结果不能实时输出到nohup后台定向文件,只能在程序结束时一次性输出。典型问题样例:在python中使用了os.system(command)方法,command命令打印的结果可以…

快速入门游戏领域,开发游戏需要哪些技术?

在这个充满创意和技术的时代,游戏行业成为众多创新人才追求梦想的热土。对于准备踏入这个充满挑战与机遇的领域的新人来说,了解游戏开发流程是至关重要的。 游戏市场蓬勃发展,游戏行业未来行情可观,在这个充满创意和技术的时代&a…

Open CASCADE学习|通过指定点的曲线

在OpenCASCADE中,如果你想通过一系列指定的点来创建一条曲线,你可以使用Geom2dAPI_Interpolate类来实现二维曲线的插值,或者使用GeomAPI_Interpolate类来实现三维曲线的插值。这些类允许你定义一条B样条曲线,这条曲线将精确地通过…

说说精益生产管理咨询公司排名的那些事

面对市场上琳琅满目的精益生产管理咨询公司,企业如何做出明智选择,避免陷入“坑”中,成为了一个值得探讨的话题。本文将从多个维度出发,为大家揭晓精益生产管理咨询公司排名的那些事,助您找到最适合的合作伙伴。 一、认…

三种方式可以将彩色图像转成灰度图对比

有三种方式可以将彩色图像转成灰度图 1、直接imread(“1.jpg” , 0);直接读取灰度图像 2、读取彩色图像然后 灰度 0.299 * 红色 0.587 * 绿色 0.114 * 蓝色进行转换 3、调用cvtColor函数cvtColor(srcImg, imgShow, COLOR_BGR2GRAY); 通过测试来对比三者的区别&…

ctf.show靶场ssrf攻略

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 web351 解析:post传入url参数他就会访问。 解法: hackbar传入url参数写入https://127.0.0.1/flag.php web352 解析:post传入url参数,不能是127.0.0.1和localhost 解法:缩写127.1传入 web353 解析…

QT设置闹钟超时播报

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTimerEvent> #include<QTime> #include<QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic…

党务政务服务|基于SprinBoot+vue的党务政务服务热线系统(源码+数据库+文档)

党务政务服务热线系统 目录 基于SprinBootvue的党务政务服务热线系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 管理员功能模块 管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博…

使用QT界面运行roslaunch,roslaunch,roscore等

QT通过界面运行rosrun,roslaunch,roscore等 QT 运行roslaunch加入ui界面修改cmakelist运行 使用qt界面运行rosrun&#xff0c;roscore,roslaunch等方法一方法二方法三 QT 运行roslaunch 首先需要使用QT安装好ROS插件&#xff0c;并且配置好环境&#xff0c;这个在之前的文章已…

webctf

熟悉robots.txt协议&#xff0c;可能存在一些敏感信息(sql在登录时候的万能密码a’ or true#)熟悉phps文件&#xff0c;phps文件就是 php 的源代码文件&#xff0c;通常用于提供给用户&#xff08;访问者&#xff09;查看 php 代码&#xff0c;因为用户无法直接通过 Web 浏览器…

所有即将登陆iPhone 16的Apple智能功能以及预期发布时间

苹果即将在9月9日的“Glowtime”&#xff08;闪耀时刻&#xff09;发布会上揭示和&#xff0c;这是本年度最值得期待的iPhone。 据悉&#xff0c;今年的iPhone将推出更大的屏幕、更快的芯片、更好的摄像头、新的颜色以及更多的内部升级。但是&#xff0c;除了这些硬件提升外&a…

Kubernetes上安装Metallb和Ingress并部署应用程序

视频和代码仓库 视频教程地址&#xff1a;https://www.bilibili.com/video/BV1QV4rebEb8 代码仓库地址&#xff1a;https://github.com/xiaohh-me/kubernetes-yaml 网络规划 之前已经写了几篇安装Kubernetes文章&#xff0c;这次来讲讲在Kubernetes上安装Ingress&#xff0c…

Qt+FFmpeg开发视频播放器笔记(三):音视频流解析封装

音频解析 音频解码是指将压缩的音频数据转换为可以再生的PCM(脉冲编码调制)数据的过程。 FFmpeg音频解码的基本步骤如下: 初始化FFmpeg解码器(4.0版本后可省略): 调用av_register_all()初始化编解码器。 调用avcodec_register_all()注册所有编解码器。 打开输入的音频流:…

vue3数据持久化方案:pinia-plugin-persistedstate源码浅析

概述 Pinia是vue3的官方推荐用于数据共享的库,但是Pinia🍍中的数据是存在于浏览器的内存中,当浏览器刷新后,这些数据就会消失。因此我们需要对数据做持久化存储,这个时候就需要用到pinia-plugin-persistedstate。 pinia-plugin-persistedstate本质上利用浏览器持久化存…

智慧平台赋能政务管理,声通科技助力政务管理智能化

在智能时代的大潮中&#xff0c;政务管理也在不断寻求创新与突破&#xff0c;在这方面&#xff0c;涌现出了很多优秀的公司。比如声通科技的子公司西安金讯数智信息技术有限公司&#xff0c;就在AI政务热线领域有很多创新成果&#xff0c;为政务管理的智能化升级提供了新思路。…

杰发科技Bootloader(3)—— 基于7801的APP切到Boot

为了方便在APP中跳转到Boot重新进行升级&#xff0c;有两种办法&#xff0c;7840同样可以使用。 1. 调用reset接口进行复位&#xff0c;复位后会先进Boot&#xff0c;再自动跳转到App。 NVIC_SystemReset(); 2. 直接使用跳转指令&#xff0c;参考Boot跳转到App代码&#xff0…