# 万度云盘 **Repository Path**: qi-dunyan/wandu-cloud-disk ## Basic Information - **Project Name**: 万度云盘 - **Description**: 万度云盘项目 - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-09-04 - **Last Updated**: 2024-01-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 万度云盘 #### 开发环境 Server:CentOS7.6/vim、g++、gdb、Makefile Client:Windows11/VS2019 #### 涉及技术 单例设计模式、 C++11(多线程、线程池)、C++17(文件系统库)、读写锁、第三方库的使用(jsoncpp、bundle、httplib、md5) #### 项目简介 借助httplib库搭建服务器与客户端,客户端运行后会自动将指定目录下的文件进行上传备份,服务器收到请求后,将其备份到指定目录下,同时该项目支持用户使用浏览器查看已备份的本项目主要实现基于httplib库搭建的服务器,该服务器对客户上传的文件进行热点管理以及定向备份,并支持用户使用浏览器查看和下载已备份的文件,同时在下载时支持断点续传。另外本项目对客户端还进行了简单的实现,客户端负责监控指定目录下的文件并自动上传到服务器。 #### 架构构成 服务端: - 实用工具类:提供对文件的相关操作->数据的读写、获取各种属性信息(涉及C++17文件系统库)、文件的压缩解压缩(bundle库)、数据的序列化与反序列化(jsoncpp库)。 - 数据管理类:包含数据信息以及数据信息管理(持久化存储、增、改、查等),这里对于数据信息在内存中的存储采用了哈希表,便于高效访问。 - 配置文件类:采用单例懒汉模式,便于全局任意位置获取配置文件中的相关信息,从而构建url、packpath、backpath等。 - 热点管理类:检索指定备份目录下的所有文件信息,判断是否为非热点文件,对非热点文件进行压缩处理。 - 业务处理类:利用httplib库快速搭建服务端,对于收到的请求做相应处理,如文件上传、页面展示、文件下载。 服务端后续新增: - 非热点文件采用单例的线程池来负责压缩,大大提高多个非热点文件的压缩效率。 - 对于页面展示请求的前端页面做了优化,优化用户的观感体验,如下为展示页面: ![展示页面](src-server/%E5%B1%95%E7%A4%BA%E9%A1%B5%E9%9D%A2.jpg) - 服务端新增对文件的MD5判断功能,假如已经存在了一个压缩文件,如果现文件没有发生数据更改,则直接删除,不进行压缩,发生修改后则进行压缩并修改备份信息。 - 客户端也新增了对文件的MD5判断,不会上传未修改的已上传文件,这里服务端于客户端都进行判断是为了防止服务端可能会对数据进行修改(这种情况按理来说不存在,除非你有意在服务端对文件进行修改)。 客户端: 相对于服务端来说,客户端的内容则相对简洁些,具有实用工具类(这里主要是对文件的相关操作),信息管理类(持久化存储、增、改、查)、以及利用httplib构建的客户端请求。 #### 视频链接 [点击传送](http://www.bilibili.com/video/BV1ZP411b7u6?vd_source=48da8644a74fbf216b46aedc8a72b531) #### 个人感悟 通过本次的经历,大大锻炼了自己的代码能力、对于bug的排查处理能力,整个过程中遇到过很多难以解决的问题,只能一步步排查处理,在其中还见识到了一些工具的用法,如valgrind,很好的帮助了自己解决问题。当然整个项目中后续也会随着自己知识的增加而进行不断更新。对自己来说很有意义,收获良多。