云之家

简介:

  随着网络的不断发展,人们对网络的认知越来越高,使用电脑的人也越来越多,网络上的新鲜事物有很多,人们都可以通过下载到自己电脑的方式来了解,那么时间一长,积攒的文件越来越多,而对于一般人来说基本不可能去更换电脑或者提升电脑存储配置,那有的人又不想删除这些下载下来的东西,所以云上存储的需求就应刃而生。人们可以花很少的钱,甚至不花钱将自己暂时不需要的东西存放在云上,等需要用的时候再从云上将其下载到自己的本地上即可。所以,借此思路我想对其进行实现。

项目功能简介:

客户端:
  1. 用户将自己需要备份的文件放在指定的文件夹中,开启应用,就会将这些文件一 一上传到服务器上;
  2. 用户可以通过网页向服务器发起 http 请求,然后服务器将下载文件列表响应在网页上,用户可以通过点击文件名将文件下载下来。
服务端:
  1. 服务器根据客户端发送的不同的响应做出不同的处理,
    ① 用户如果上传文件,那么服务器就会相应的接收文件;
    ② 如果客户端想要浏览文件列表,服务器就会将文件列表显示在网页上;
    ③ 用户想要下载文件,服务器就会给予相应的响应。
  2. 随着文件上传越来越多,服务器资源越来越少,服务器会按照文件最后一次访问时间与当前时间的间隔进行区分,如果太久时间客户端没有访问或修改该文件,那么服务器就会将该文件进行压缩,以节省服务器资源。等用户下载的时候,再将该文件解压并将解压后的文件返回给用户。

项目工作流程:

在这里插入图片描述

模块介绍:

服务端:(使用多线程进行处理请求和压缩部分)
  请求处理部分:
    首先,客户端会向服务器发起三类请求:① 从浏览器上向服务器发起页面展示请求 ② 从浏览器上向服务器发起文件下载请求 ③ 上传文件请求
    对于第一类请求,客户端会向服务器发起GET请求,服务端向浏览器响应文件列表信息供用户查看。
    对于第二类请求,客户端通过点击文件名向服务器发起GET请求,服务器将文件内容响应给用户,用户就会下载相应的文件。
    对于第三类请求,客户端会向服务器发起PUT请求,请求将文件资源上传至服务器,服务器根据http请求报文中的Range字段确定文件大小,并将文件存放至对应目录中。
  压缩模块:
    定义一个热度时间,用当前时间减去文件的最后一次修改时间,用时间间隔与热度时间进行判断,如果超过热度时间就将文件进行压缩存储以节省服务器空间。当用户下载文件时,将文件先解压,并将文件内容响应给用户,并更新文件存储信息。
服务器代码框架:
在这里插入图片描述
客户端:
  上传文件功能:
    给每个文件设置一个etag信息:mtime-fsize(最后一次修改时间-文件大小),根据etag信息中的最后一次修改时间进行判断是否需要上传。如果一旦有修改或者有新文件,就更新etag信息并将文件上传,将上传的文件信息记录下来。
    上传文件使用多线程分块上传,由于上传的文件是按块传输,每个块的位置不冲突,所以不用加锁,这样效率更高。
客户端代码框架:
在这里插入图片描述

bug修复:

  1. 从客户端上传的文件由于Windows下的编码格式是gbk,而Linux下的编码格式是utf-8,所以会导致上传的中文文件名乱码,遍历文件列表中的文件名,使用shell脚本将乱码的文件名修正。
  2. 多个用户向服务器发起浏览列表请求会造成读写混乱,使用读写锁解决多用户同时访问导致文件列表显示错乱的情况。

项目源码:

GitHub地址:项目源代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值