初夏小谈:AI云盘系统

14 篇文章 0 订阅

一、做AI云盘系统项目的目的:

解决由于经常将一些以前的文件删除,而现今或者以后可能用到的尴尬境地。

解决云盘下载限速的问题:在本地虚拟机CentOS7上:30M/S~60M/S,在云服务器上:0.2M/S~1M/S

二、AI云盘系统主要功能为

客户端对指定的一个目录进行监听,将比较重要的文件添加到此目录下,系统会自动根据文件的状态信息来对文件进行上传至服务器。并且可以随时随地的进行网页进行浏览以前的文件信息,以及根据需要下载。

三、具体功能:

AI云盘系统功能具体可分为两大块:分别是客户端和服务端两大部分。

客户端与服务端通信的协议是基于HTTP协议。

客户端:

1.首先获取文件的备份信息记录,目的是看看哪些文件已经进行了备份,并将这些文件的大小和修改信息以键值对的形式保存到unordered_map中。

2.接下来对指定的目录进行监听,如果是目录则进行递归监听直到文件被扫描完毕。判断这些文件是否需要上传,通过获取它们的etag信息里面有文件大小和最后一次修改时间。并且将这些信息与unordered_map中存储的修改信息进行对比,如果发生改变则需要上传否则不需上传。

3.当需要上传时,则对文件采取分块上传的方式(提高效率)。将每个块进行记录原位置,并进行组织HTTP请求,设置它的请求方式,上传路径,上传数据长度。之后调用httplib.h中的上传接口实例化客户端对象来向指定的服务端发送PUT请求,利用多线程将这些分块进行上传。

4.在上传完毕后,将这些文件的etag信息保存到unordered_map中。

5.最后将unordered_map中保存的备份文件信息记录刷新到备份文件信息的文件中。

在客户端所遇到的问题:

1.在分块上传文件时,起初考虑到如果最后一块不够一个块大小就将它和最后一块进行上传。所以块大小少了一个。这样看似没有问题,但是当文件不够一个块大小时,就会出现问题。导致上传失败。

解决办法:我将开始分块时首先判断是不是可以切分为整块,如果是则正常上传,如果存在不够一个块的情况,将块个数+1,并重新计算最后一个块的末尾位置。这样就可以按照统一方式进行上传。只是根据具体文件大小判断需不需要多创建一个分块来上传就可以了。

2.boost库中函数split分割函数的问题,由于将第三个参数设置为以\n分割。导致的总报错说如图:

解决办法:后查资料没有发现问题,求助老师后,说split分割的第三个参数是以boost::is_any_of("\n")。得以实现

服务端:

1.提供解析对客户端发来的PUT请求信息。并将传来的数据进行备份。

2.服务端对客户端提供获取备份文件列表的功能。

3.服务端对客户端提供对所需文件进行下载的功能

4.服务端每隔一定时间对文件进行判断是否需要进行压缩处理一次,目的使得磁盘空间充分利用。

1.服务端在对客户端发送过来的请求信息进行解析,拿到上传文件路径及range的信息,里面有块大小,起始位置,结束位置。服务端将数据备份到对应位置文件的对应位置上。

2.当客户端通过浏览器浏览备份的文件时。此时服务器通过保存的备份文件信息的列表来获取相应文件名。

3.当客户端需要下载时,此时有两种情况:

情况一:当源文件存在时直接获取源文件内容进行下载。

情况二:当源文件已经被压缩了,此时就需要进行解压后再进行文件内容获取。首先通过文件名在unordered_map保存对应文件及压缩文件信息。找到该压缩文件。之后对文件进行解压到list目录下。再获取文件内容进行下载。

4.每次当服务端起来,就创建一个线程,首先获取,备份压缩文件信息。存储到unordered_map中。接着对list目录下文件进行检测。判断文件文件是否可以压缩。通过该文件的当前时间和stat结构体中保存的文件访问时间之差来进行判断,在这里我设定了两天。为了测试方便设定了10秒。如果大于非压缩时间,就将文件进行压缩,调用zlib.h文件压缩的函数gzwrite。读取源文件,并用gzwrite进行压缩写入。并将压缩的文件信息保存到unordered_map中。

5.最后将unordered_map中的压缩文件信息保存到record.list中。用来记录压缩文件的压缩文件名,以及压缩文件名。

在服务端所遇到问题:

1.当客户端通过浏览器下载文件时,总是打开文件信息,而不进行下载。

这是下载格式的问题:使用:application/octet-stream,使得任意格式文件下载。

2.增加服务器分块上传文件功能,遇到问题:ofstream写入默认截断写入导致前面乱码,改用系统调用接口


四、测试功能:

1.服务器启动,客户端开始监听指定目录:backup

2.向backup目录中添加文件

服务端显示:

3.客户端浏览器查看及下载文件:

4.测试文件是否上传正确:

                                                                                                                                                               珍&源码          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 本课题的目的及意义 本次课题开发的目的是建立一个网络系统把一些资源整合在一起而形成一个网络资源,从而给用户提供资源。网络硬盘,是一种可以用户基于互联网登录网站的进行信息数据上传、下载、共享等操作的信息数据存储空间。也称为:网络磁盘、网络空间、网络U盘、网络优盘等等。 目前网络硬盘有很多种,主要分成免费和收费的。免费的网络硬盘的可用空间较少,一般对文件大小、下载速度、存放时间等限制;收费的网盘能提供大容量空间,文件大小、下载速度、存放时间及格式都不限制。把大量的资源集合在一起,对不同的用户提供不同的资源及材料,给需求者带来很大的方便。 2. 本课题在国内外的研究动态 随着现代信息技术的迅速发展,自动化和信息化的管理方式已经扩展到了各行各业。网络硬盘是存储信息的一种存储资源,有着三个阶段的发展。第一阶段,上世纪90年代之前,网络硬盘的主要功能是存储功能,及用户只能上传下载信息数据简单操作。提供网络硬盘产品的服务商较少,以电信营业商为主,赢利模式以有偿服务(收费)为主。第二阶段,上世纪90年代至21世纪初,随着信息技术不断发展,网络硬盘功能逐步加强,很多互联网纷纷推出网络硬盘产品作为营销亮点,吸引留着用户,功能丰富,与其他互联网产品兼容方便,这个阶段网络硬盘产品的提供者主要以邮箱服务提供商为主。赢利模式以免费和收费共存。第三阶段,21世纪初至2009年,互联网的迅猛发展,为网络硬盘发展提供了广阔的市场前景,这时出现了专业提供网络硬盘服务的营运商,但在收费还没有被培养起来的市场竞争环境中,营运商一直难于摆脱亏损的窘境。直到云计算(存储)技术的应用,才给网络硬盘营运商带来了一丝曙光,最具代表性的就是数据银行的出现,数据银行是一个构建在高速分布式存储网络上的数据中心,它将网络中大量不同类型的存储设备通过应用软件集合起来协同工作,形成一个安全的数据存储和访问的系统,适用于各大中小型企业与个人用户的数据资料存储、备份、归档等一系列需求。数据银行最大优势在于将存储产品转换为存储服务,甚至,在未来数据银行可能像传统银行储蓄有利息一样衍生出更多信息数据增值服务,比如:用户通过存储数据并共享,从中受益。 3. 本课题的研究内容 本课题将深入了解网络硬盘及网络硬盘的作用,上传或者下载资源,从而使更多的用户从中获取更加丰富的资源。利用网络的普遍,提高网络资源的利用率及为普遍的用户带来方便。本课题研究的内容包括有:(1)上传和下载资源 :上传的资源及下载限制的速度及一些内容。(2)设置资源的共享方式:免费制.者收费制或者设置VIP会员。(3)开发出一个安全简单而又实在的网络硬盘系统。 4. 本课题的实行方案 本课题利用ASP.NET技术开发一个网络硬盘系统。实行方案如下: (1)构建基本系统结构及对系统进行需求分析 (2)收集资料,认识系统开发工具并利用开发ASP.NET建立网页。 (3)规划系统模块,设计系统模块功能,包括文件的上传,资料的下载,设计各种用户管理等。 (4)测试系统各个模块,优化系统模块并美化外观。 (5)系统开发完成。 (6)撰写论文。 5. 已查阅参考文献:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值