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

news2024/11/26 1:36:18

文章目录

  • 一、 需求分析
  • 二、 概念结构设计
  • 三、逻辑结构设计
    • 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.coloradmin.cn/o/2123438.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7.科学计算模块Numpy(4)ndarray数组的常用操作(二)

引言 书接上回,numpy能作为python中最受欢迎的数据处理模块,脱离不了它最核心的部件——ndarray数组。那么,我们今天就来了解一下numpy中对ndarray的常用操作。 通过阅读本篇博客,你可以: 1.掌握ndarray数组的分割 …

shader 案例学习笔记之smoothstep函数

参考:smoothstep 用来生成0-1的平滑过渡值 smoothstep函数源码实现: float smoothstep(float t1, float t2, float x) {// Scale, bias and saturate x to 0..1 rangex clamp((x - t1) / (t2 - t1), 0.0, 1.0); // Evaluate polynomialreturn x * x *…

@rem和rem用法和区别

在Windows的命令提示符(cmd)中,rem和rem都是用来注释批处理脚本的。 用法: rem:在一行的开头使用,注释只对当前行有效。rem:也在一行的开头使用,注释会一直持续到下一行。 区别&a…

基于SpringBoot的在线汽车租赁信息管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的在线汽车租赁信息…

STM32 HAL freertos零基础(五) STM32CubeMX配置完成后自定义二值信号量 解决二值信号量初始值为1问题

1、简介 通过上文虽然实现了二值信号量实战,但每次配置STM32CubeMX二值信号量都恢复默认值1,为了解决该问题,对于二值信号量通过CubeMX配置完成后,在程序内自定义二值信号量。 2、文件建立 建立BinarySem文件夹添加BinarySem.c…

Selenium自动化测试网页加载太慢如何解决(超详细)

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 遇到网页加载慢,selenium运行效率降低,可以通过修改页面加载策略提升自动化效率。 selenium加载很慢 通过URL导航到新页面时,…

利用平板电脑和谷歌浏览器进行在线教育学习

在数字化时代,教育的形式越来越多样化,特别是在线教育的兴起为学习带来了前所未有的便利。对于经常在平板电脑上进行学习的用户来说,谷歌浏览器提供了强大的功能,帮助用户更有效地学习。本文将指导您如何在使用平板电脑和谷歌浏览…

系统工程建模MBSE

################################# ############# 片段一 ############## ################################# 下图采用“V”模式显示了集成的基于模型的系统/嵌入式软件开发流程Harmony。左侧描述了自顶向下的设计流程,而右侧显示了自底而上的从单元测试到最终系统验收测试…

‌语音控制小夜灯的实现方案介绍

‌语音控制小夜灯的实现方案组成部分‌ 语音控制小夜灯的实现方案主要包括硬件组装和软件编程两个部分。‌ ‌硬件组装‌涉及将语音声控模块、灯泡、USB连接线等组件正确连接。首先,使用螺丝刀和螺丝将四个隔离柱固定在底板四个拐角处,同时将语音声控模…

Linux CentOS更换阿里云源解决Could not retrieve mirrorlist http://mirrorlist.centos.org

Linux CentOS7 更新yum 操作的时候出现这个问题: Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org 然后我执行 grep -nr "mirrorlist.centos.org" /etc/yum.repos.d/* 出现 这个问题时可以…

2023下半年软考网络规划

【考情分析】2023下半年软考网络规划设计师机考考情分析-真题解析公开课视频!_哔哩哔哩_bilibili2023年11月软考网络规划设计师案例分析解析与考后复盘_哔哩哔哩_bilibili全网首发!2023年下半年软考【高级】网规真题试卷--案例分析(部分回忆版…

如何优化谷歌排名更有效?

要想提高排名,首先得从用户的角度出发。要想他们在搜索时最关心什么问题,急需解决哪些痛点,之后要做的就是创建GHA高质量内容,创建内容时尽量深入探讨这些问题,而不是泛泛而谈。内容要自然,尽量避免过多的关…

北京等你!网易云信参加第五届中国银行数智峰会

随着数字中国建设的持续深入,以及大数据、云计算、AI、融合通信等技术在银行业务场景中的应用,银行业正在经历新一轮的数智化转型与革新。 数字化转型不仅是技术层面的升级,更是业务模式和运营方式的全面革新。比如智能虚拟客服、数字银行等的…

软件测试学习笔记丨Postman实战练习

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32096#h-22 二、实战练习 2.1 宠物商店接口文档分析 接口文档:http://petstore.swagger.io ,这是宠物商店接口的 swagger 文档。 2.1.1 什么是 swagger Swagger 是…

更改flutter 应用的应用名称和图标

在 Flutter 项目中,更改构建后的应用名称和图标是常见的定制化需求。以下是如何更改应用名称和图标的步骤。 1. 更改应用名称 Android 平台 修改 Android 端的应用名称: Flutter 项目的 Android 部分位于 android/app/src/main/AndroidManifest.xml …

高度可定制的电竞鼠标,雷柏VT1 PRO MAX体验

不管是菜鸟还是老鸟,游戏玩到某个阶段很容易出现瓶颈,在游戏的某个阶段,这里面制约最大的除了操作之外,实际上还是我们用的硬件。比如在PC游戏中,鼠标的影响就非常大,像是在游戏中如果鼠标延迟过高&#xf…

每天五分钟玩转深度学习框架PyTorch:获取神经网络模型的参数

本文重点 当我们定义好神经网络之后,这个网络是由多个网络层构成的,每层都有参数,我们如何才能获取到这些参数呢?我们将再下面介绍几个方法来获取神经网络的模型参数,此文我们是为了学习第6步(优化器)。 获取所有参数Parameters from torch import nn net=nn.Sequent…

责任链模式chain of responsibility

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/chain-of-responsibility 将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者 把责任链造出来然后往后传

SQL的高级查询练习知识点中(day25)

1 学习目标 重点掌握聚合函数的使用重点掌握字段别名重点掌握分组查询的语法重点掌握having的使用方法了解子查询的语法重点掌握排序查询语法 2 排序查询 2.1 语法 SELECT要查询的东西 FROM表 WHERE 条件 ORDER BY 排序的字段|表达式|函数|别名 [ASC|DESC] ASC 升序&#…

Mendix 10.14 版 – 新版本上线及新功能点介绍

Mendix 10.14版本的全部内容都是“连接点”——从简化Studio Pro中的编辑体验到用于连接到其他系统的强大更新。 Studio Pro已针对性能进行了优化,用户现在可以直接在属性窗格中更改样式。现在也可以在系统文本编辑器中使用Maia(AI)进行翻译…