1.项目需求
对指定目录下的文件进行监控,将新文件或者发生修改的文件自动上传到服务器进行备份;
服务器对上传的文件进行存储,并将非热点文件进行压缩,提供浏览器查看文件列表和文件断点续传下载功能;
2.开发环境
Windows客户端程序:
? vs2017
Linux服务端程序:
? vim、g++
3.项目模块
Windows客户端
在指定的监控目录下进行扫描,找到需要备份的文件路径,搭建http客户端将文件上传到服务器进行备份
Linux服务端
两个线程并行运行,
文件管理线程扫描备份目录下,将非热点文件进行压缩存储;
服务器线程负责处理来自Windows客户端的请求和浏览器的请求;
服务器线程主要实现备份文件列表浏览、文件下载、文件上传接口,并注册路由;
- 文件列表浏览:
? 组织文件列表信息的响应正文;
-
文件下载 根据请求头部判断是否是断点续传,将对应的文件写入响应正文; -
文件上传 将请求体中的文件存储到备份目录下;
4.项目源码
Link
5.项目遇到的问题
-
在客户端的数据写入模块,向一个空的容器写入数据,没有进行增容; -
在windows平台和Linux平台存在字符编码的转换问题; -
在进行序列化时,不能使用\n进行分割,因为文件中可能会有换行,所以使用选择使用不可见字符\5进行间隔; -
ETag字段的值因为有特殊符号,所以在设置时没有设置成功,导致断点续传失败,通过将计算出来的ETag值进行转换,把特殊符号统一转换为空格; -
采用bundle库进行压缩需要将数据放入内存,虚拟机之前的运行内存太小,所以运行报错,需要比较大的运行内存;
|