专利名称:文件上传的方法、客户端、服务器及系统的制作方法
技术领域:
本发明涉及文件上传领域,特别涉及一种文件上传的方法、客户端、服务器及系统。
背景技术:
当今社会的人们在工作、学习和生活时,常常使用各种文件上传系统上传文件,例如,用户向电子邮件中上传附件,向相册上传照片,或者向网盘上传资料等,都需要使用文件上传系统。目前大多数文件上传系统在处理用户上传的文件的时候,会先查找自己的服务器上的文件的MD5 (Message Digest Algorithm 5,消息摘要算法第五版)值中,是否存在与待上传文件的MD5值相同的MD5值如果存在,说明服务器上有该文件,就不需要再上传该文件,直接使用服务器上已经存在的文件即可,并通知用户上传文件成功;如果不存在,说明服务器上没有与待上传文件相同的文件,那么全量上传用户的文件,并保存在服务器上。文件上传系统采用这种机制可以针对完全相同的文件(即MD5值相同的文件)来进行优化,当用户上传相同的文件时,能够减少网络传输量和用户等待时间。在实现本发明的过程中,发明人发现现有技术至少存在以下缺点在现实生活中,用户上传的大量文件往往具有很大的相似性,例如,修改了近十稿的毕业论文,每次修改的内容都很少,又例如,在视频网站上用户在上传视频的时候,同一个的视频的精彩部分可能被不同的用户剪辑了多个版本,这些不同版本的视频片段之间的相似度也非常大。当用户向服务器上传与之前上传的文件相近似的文件的时候,由于这些文件并不完全相同,每次都需要全量上传,造成网络传输量大和用户等待时间长的缺陷。
发明内容
为了实现文件的高效上传,减少用户上传文件时的网络传输量和等待的时间,本发明实施例提供了一种文件上传的方法、客户端、服务器及系统。所述技术方案如下—方面,提供了一种文件上传的方法,所述方法包括接收客户端发送的文件上传请求;判断是否有与待上传文件的消息摘要算法第五版MD5值相同的文件,如果是,则使用所述MD5值相同的文件作为所述待上传文件,否则,判断所述客户端以前上传的文件中,是否存在与所述待上传文件的文件名相同的文件,如果是,则计算出所述待上传文件与所述文件名相同的文件的不同部分,并使所述客户端上传所述不同部分,否则,使所述客户端全量上传所述待上传文件。其中,所述计算出所述待上传文件与所述文件名相同的文件的不同部分,具体包括
采用远程同步Rsync算法计算出所述待上传文件与所述文件名相同的文件的不同部分。相应地,所述采用远程同步Rsync算法计算出所述待上传文件与所述文件名相同的文件的不同部分,具体包括由所述客户端将所述待上传文件分割成一组不重叠的固定大小的数据块,并对每个数据块执行32位的滚动弱校验和1 位的消息摘要算法第四版MD4强校验,得到所述每个数据块的弱校验码和强校验码;获取所述每个数据块的弱校验码和强校验码,并扫描所述文件名相同的文件,找到与所述待上传文件的弱校验码和强校验码中的至少一项不同的数据块。进一步地,所述接收客户端发送的上传文件请求之后,还包括校验待上传文件的参数和安全性是否符合要求,如果是,则执行所述判断是否有与待上传文件的消息摘要算法第五版MD5值相同的文件的步骤,否则,向所述客户端返回错误信息。更进一步地,所述判断是否存在与待上传文件的消息摘要算法第五版MD5值相同的文件之前,还包括计算待上传文件的消息摘要算法第五版MD5值。另一方面,提供了一种文件上传的客户端,所述客户端包括发送模块,用于向服务器发送文件上传请求;部分上传模块,用于在所述发送模块向所述服务器发送文件上传请求后,当所述服务器判断所述客户端以前上传的文件中,存在与待上传文件的文件名相同的文件时,向所述服务器上传所述待上传文件与所述文件名相同的文件的不同部分;全量上传模块,用于在所述发送模块向所述服务器发送文件上传请求后,当所述服务器判断所述客户端以前上传的文件中,不存在与所述待上传文件的文件名相同的文件时,向所述服务器全量上传所述待上传文件。进一步地,所述客户端还包括分割模块,用于在所述部分上传模块向所述服务器上传所述待上传文件与所述文件名相同的文件的不同部分之前,将所述待上传文件分割成一组不重叠的固定大小的数据块;校验模块,用于对所述分割模块分割成的每个数据块执行32位的滚动弱校验和1 位的消息摘要算法第四版MD4强校验,得到所述每个数据块的弱校验码和强校验码。另一方面,提供了一种文件上传的服务器,所述服务器包括接收模块,用于接收客户端发送的文件上传请求;第一判断模块,用于在所述接收模块接收客户端发送的文件上传请求后,判断是否有与待上传文件的消息摘要算法第五版MD5值相同的文件;使用模块,用于在所述第一判断模块判断有与所述待上传文件的MD5值相同的文件时,使用所述MD5值相同的文件作为所述待上传文件;第二判断模块,用于在所述第一判断模块判断没有与所述待上传文件的MD5值相同的文件时,判断所述客户端以前上传的文件中,是否存在与所述待上传文件的文件名相同的文件;
第一计算模块,用于当所述第二判断模块判断所述客户端以前上传的文件中,存在与所述待上传文件的文件名相同的文件时,计算出所述待上传文件与所述文件名相同的文件的不同部分;使部分上传模块,用于使所述客户端上传所述第一计算模块计算出的所述不同部分;使全量上传模块,用于当所述第二判断模块判断所述客户端以前上传的文件中,不存在与所述待上传文件的文件名相同的文件时,使所述客户端全量上传所述待上传文件。其中,所述第一计算模块,具体用于采用远程同步Rsync算法计算出所述待上传文件与所述文件名相同的文件的不同部分。相应地,所述第一计算模块,具体包括获取单元,用于由所述客户端将所述待上传文件分割成一组不重叠的固定大小的数据块,并对每个数据块执行32位的滚动弱校验和1 位的消息摘要算法第四版MD4强校验,得到所述每个数据块的弱校验码和强校验码后,获取所述每个数据块的弱校验码和强校验码;扫描单元,用于扫描所述文件名相同的文件,找到与所述获取单元获取的所述待上传文件的弱校验码和强校验码中的至少一项不同的数据块。进一步地,所述服务器还包括校验模块,用于在所述接收模块接收客户端发送的文件上传请求后,校验待上传文件的参数和安全性是否符合要求,如果是,则执行所述第一判断模块,否则,向所述客户端返回错误信息。更进一步地,所述服务器还包括第二计算模块,用于在所述第一判断模块判断是否有与待上传文件的消息摘要算法第五版MD5值相同的文件之前,计算所述待上传文件的MD5值。另一方面,提供了一种文件上传的系统,所述系统包括客户端和服务器;其中,所述客户端如上述客户端;所述服务器如上述服务器。本发明实施例提供的技术方案的有益效果是通过利用服务器上与待上传文件相似的文件,仅将待上传文件中的不同部分通过网络上传到服务器,因此大大减少了网络传输量,并减少用户上传文件的等待时间,同时,Rsync算法只需要扫描文件一次,从而可以减少由于计算文件差异带来的延时。
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例一提供的文件上传的方法流程图;图2是本发明实施例二提供的文件上传的方法流程图3是本发明实施例三提供的文件上传的客户端结构示意图;图4是本发明实施例三提供的另一种文件上传的客户端结构示意图;图5是本发明实施例四提供的第一种文件上传的服务器结构示意图;图6是本发明实施例四提供的第一计算模块结构示意图;图7是本发明实施例四提供的第二种文件上传的服务器结构示意图;图8是本发明实施例四提供的第三种文件上传的服务器结构示意图;图9是本发明实施例五提供的文件上传的系统结构示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例一本发明实施例提供了一种文件上传的方法,参见图1,方法流程具体如下101 接收客户端发送的文件上传请求;102 判断是否有与待上传文件的MD5值相同的文件,如果是,则执行步骤103,否则,执行步骤104;103 如果有与待上传文件的MD5值相同的文件,则使用该MD5值相同的文件作为该待上传文件;104 如果没有与待上传文件的MD5值相同的文件,则判断该客户端以前上传的文件中,是否存在与该待上传文件的文件名相同的文件,如果是,则执行步骤105,否则,执行步骤106 ;105:如果存在与该待上传文件的文件名相同的文件,则计算出该待上传文件与该文件名相同的文件的不同部分,并使该客户端上传该不同部分;106:如果不存在与该待上传文件的文件名相同的文件,则使该客户端全量上传该待上传文件。本发明实施例提供的方法,通过利用服务器上与待上传文件相似的文件,仅将待上传文件中的不同部分通过网络上传到服务器,因此大大减少了网络传输量,并减少用户上传文件的等待时间,同时,Rsync算法只需要扫描文件一次,从而可以减少由于计算文件差异带来的延时。实施例二本发明实施例提供了一种文件上传的方法,参见图2,方法流程具体如下201 接收客户端发送的文件上传请求;具体地,服务器接收用户通过客户端发送的文件上传请求,该请求中包括用户要上传的文件在用户本地的地址。例如,用户请求在邮件中上传附件,请求上传照片到相册,或者请求上传视频等等,都是由相应的客户端将这些文件上传请求发送给服务器。其中,在客户端接收到用户的文件上传请求后、将该文件上传请求发送给服务器之前,可以先校验待上传文件的格式、大小、规格和安全性等是否符合要求,如果都符合要求再将该文件上传请求发送给服务器,由服务器进行后续处理,如果有至少一项不符合要求,则向用户返回错误信息。
202 校验待上传文件的参数和安全性是否符合要求,如果是,则执行步骤204,否则,执行步骤203;其中,文件的参数可以包括文件的格式、大小和规格等。服务器通过文件上传请求中的本地地址找到待上传文件,并校验该待上传文件的参数是否符合要求和是否安全,来确定是否继续处理该文件上传请求。该步骤是在客户端对待上传进行校验后,服务器再对其进行校验,进一步确保待上传文件的安全性。203 如果不符合要求,则向该客户端返回错误信息,流程结束;具体地,如果待上传文件的格式不正确,或大小和规格不合格,或者不安全,则向该客户端返回相应的错误信息,提醒用户文件传送失败或者重新选择要上传的文件。需要说明的是,本实施例提供的方法还可以省略上述步骤202和203,即执行完步骤201后直接执行步骤204,本发明实施例对此不作具体限定。204 如果符合要求,则判断是否有与待上传文件的MD5值相同的文件,如果是,则执行步骤205,否则,执行步骤206 ;针对该步骤,如果文件上传请求中没有该待上传文件的MD5值,则在执行该步骤之前,计算待上传文件的MD5值;如果文件上传请求中有该待上传文件的MD5值,则直接获取该MD5值。其中,服务器判断是否有与待上传文件的MD5值相同的文件,是用于判断是否有与待上传文件完全相同的文件。由于每个文件都拥有一个自己专属的、独一无二的MD5值,所以通过查找服务器上的文件的MD5值中,是否有与待上传文件的MD5值相同的MD5值,就可以判断服务器上是否有与待上传文件完全相同的文件。205 如果有与待上传文件的MD5值相同的文件,则使用该MD5值相同的文件作为该待上传文件,流程结束;具体地,无需使该客户端上传该待上传文件,而是直接使用服务器上该MD5值相同的文件作为该待上传文件使用,并通知客户端文件上传成功。206 如果没有与待上传文件的MD5值相同的文件,则判断该客户端以前上传的文件中,是否存在与该待上传文件的文件名相同的文件,如果是,则执行步骤207,否则,执行步骤208 ;具体的,将待上传文件的文件名与该客户端以前上传的文件的文件名进行匹配,如果存在与该待上传文件的文件名相同的文件,则说明该待上传文件可能与服务器上与其文件名相同的文件是相似文件。需要说明的是,本步骤意在判断该客户端以前上传的文件中是否存在与待上传文件相似的文件,本发明实施例采用的方式是判断是否存在与该待上传文件的文件名相同的文件。在实际应用中,如果没有文件名完全相同的文件,还可以采用文件名非常相似的文件作为与待上传文件相似的文件,本发明实施例对此不作具体限定。当采用文件名非常相似的文件作为与待上传文件相似的文件时,要先查找是否存在与待上传文件的文件名的相似度在预设范围内的文件,如果存在,则将这些文件名相似度符合条件的文件中相似度最高的文件作为与待上传文件相似的文件,其中的预设范围可以设置为大于等于80%,也可以设为其他合理值,本发明实施例对此不作具体限定。207:如果存在与该待上传文件的文件名相同的文件,则计算出该待上传文件与该文件名相同的文件的不同部分,并使该客户端上传该不同部分,流程结束;其中,计算出该待上传文件与该文件名相同的文件的不同部分,具体为,采用远程同步Rsync算法计算出该待上传文件与该文件名相同的文件的不同部分。具体地,采用远程同步Rsync算法计算出该待上传文件与该文件名相同的文件的不同部分的过程为由该客户端将该待上传文件分割成一组不重叠的固定大小的数据块,并对每个数据块执行32位的滚动弱校验和1 位的MD4 (Message Digest Algorithm4,消息摘要算法第四版)强校验,得到每个数据块的弱校验码和强校验码;获取每个数据块的弱校验码和强校验码,并扫描该文件名相同的文件,找到与该待上传文件的弱校验码和强校验码中的至少一项不同的数据块。Rsync算法能在很短的时间内计算出待上传文件与相似文件(即与其文件名相同的文件)的不同的数据。为了便于说明,假设待上传文件为文件A,在服务器上的相似文件为文件B,那么Rsync算法的应用过程可以如下首先,由该客户端通过本地地址找到文件A,并将文件A分割成一组不重叠的固定大小为S字节的数据块,最后一块可能会比S小;然后对每一个分割好的数据块执行两种校验32位的滚动弱校验和1 位的MD4强校验,得到每个数据块的弱校验码和强校验码。其中,本发明实施例不对S的大小进行具体限定,可以根据实际需要进行设定。然后,服务器获取这些校验码,并通过扫描文件B的所有大小为S的数据块(偏移
量可以任选,不一定非要是S的倍数),找到与文件A的弱校验码和强校验码中的至少一项
不同的数据块,这些不同的数据块即为文件A与文件B的不同部分。这项工作可以借助滚
动弱校验的特性很快完成,所谓滚动弱校验是指一种快速的哈希Hash方法,假设给定了一
段连续的文件,例如从k到1,计算这段文件Hash值的方法为
ι
权利要求
1.一种文件上传的方法,其特征在于,所述方法包括接收客户端发送的文件上传请求;判断是否有与待上传文件的消息摘要算法第五版MD5值相同的文件,如果是,则使用所述MD5值相同的文件作为所述待上传文件,否则,判断所述客户端以前上传的文件中,是否存在与所述待上传文件的文件名相同的文件,如果是,则计算出所述待上传文件与所述文件名相同的文件的不同部分,并使所述客户端上传所述不同部分,否则,使所述客户端全量上传所述待上传文件。
2.根据权利要求1所述的方法,其特征在于,所述计算出所述待上传文件与所述文件名相同的文件的不同部分,具体包括采用远程同步Rsync算法计算出所述待上传文件与所述文件名相同的文件的不同部分。
3.根据权利要求2所述的方法,其特征在于,所述采用远程同步Rsync算法计算出所述待上传文件与所述文件名相同的文件的不同部分,具体包括由所述客户端将所述待上传文件分割成一组不重叠的固定大小的数据块,并对每个数据块执行32位的滚动弱校验和1 位的消息摘要算法第四版MD4强校验,得到所述每个数据块的弱校验码和强校验码;获取所述每个数据块的弱校验码和强校验码,并扫描所述文件名相同的文件,找到与所述待上传文件的弱校验码和强校验码中的至少一项不同的数据块。
4.根据权利要求1-3任一权利要求所述的方法,其特征在于,所述接收客户端发送的上传文件请求之后,还包括校验待上传文件的参数和安全性是否符合要求,如果是,则执行所述判断是否有与待上传文件的消息摘要算法第五版MD5值相同的文件的步骤,否则,向所述客户端返回错误信息。
5.根据权利要求1-3任一权利要求所述的方法,其特征在于,所述判断是否存在与待上传文件的消息摘要算法第五版MD5值相同的文件之前,还包括计算待上传文件的消息摘要算法第五版MD5值。
6.一种文件上传的客户端,其特征在于,所述客户端包括发送模块,用于向服务器发送文件上传请求;部分上传模块,用于在所述发送模块向所述服务器发送文件上传请求后,当所述服务器判断所述客户端以前上传的文件中,存在与待上传文件的文件名相同的文件时,向所述服务器上传所述待上传文件与所述文件名相同的文件的不同部分;全量上传模块,用于在所述发送模块向所述服务器发送文件上传请求后,当所述服务器判断所述客户端以前上传的文件中,不存在与所述待上传文件的文件名相同的文件时,向所述服务器全量上传所述待上传文件。
7.根据权利要求6所述的客户端,其特征在于,所述客户端还包括分割模块,用于在所述部分上传模块向所述服务器上传所述待上传文件与所述文件名相同的文件的不同部分之前,将所述待上传文件分割成一组不重叠的固定大小的数据块;校验模块,用于对所述分割模块分割成的每个数据块执行32位的滚动弱校验和1 位的消息摘要算法第四版MD4强校验,得到所述每个数据块的弱校验码和强校验码。
8.一种文件上传的服务器,其特征在于,所述服务器包括接收模块,用于接收客户端发送的文件上传请求;第一判断模块,用于在所述接收模块接收客户端发送的文件上传请求后,判断是否有与待上传文件的消息摘要算法第五版MD5值相同的文件;使用模块,用于在所述第一判断模块判断有与所述待上传文件的MD5值相同的文件时,使用所述MD5值相同的文件作为所述待上传文件;第二判断模块,用于在所述第一判断模块判断没有与所述待上传文件的MD5值相同的文件时,判断所述客户端以前上传的文件中,是否存在与所述待上传文件的文件名相同的文件;第一计算模块,用于当所述第二判断模块判断所述客户端以前上传的文件中,存在与所述待上传文件的文件名相同的文件时,计算出所述待上传文件与所述文件名相同的文件的不同部分;使部分上传模块,用于使所述客户端上传所述第一计算模块计算出的所述不同部分;使全量上传模块,用于当所述第二判断模块判断所述客户端以前上传的文件中,不存在与所述待上传文件的文件名相同的文件时,使所述客户端全量上传所述待上传文件。
9.根据权利要求8所述的服务器,其特征在于,所述第一计算模块,具体用于采用远程同步Rsync算法计算出所述待上传文件与所述文件名相同的文件的不同部分。
10.根据权利要求9所述的服务器,其特征在于,所述第一计算模块,具体包括获取单元,用于由所述客户端将所述待上传文件分割成一组不重叠的固定大小的数据块,并对每个数据块执行32位的滚动弱校验和1 位的消息摘要算法第四版MD4强校验,得到所述每个数据块的弱校验码和强校验码后,获取所述每个数据块的弱校验码和强校验码;扫描单元,用于扫描所述文件名相同的文件,找到与所述获取单元获取的所述待上传文件的弱校验码和强校验码中的至少一项不同的数据块。
11.根据权利要求8-10任一权利要求所述的服务器,其特征在于,所述服务器还包括校验模块,用于在所述接收模块接收客户端发送的文件上传请求后,校验待上传文件的参数和安全性是否符合要求,如果是,则执行所述第一判断模块,否则,向所述客户端返回错误信息。
12.根据权利要求8-10任一权利要求所述的服务器,其特征在于,所述服务器还包括第二计算模块,用于在所述第一判断模块判断是否有与待上传文件的消息摘要算法第五版MD5值相同的文件之前,计算所述待上传文件的MD5值。
13.一种文件上传的系统,其特征在于,所述系统包括客户端和服务器;其中,所述客户端如上述权利要求6-7中任一权利要求所述的客户端;所述服务器如上述权利要求8-12中任一权利要求所述的服务器。
全文摘要
本发明公开了一种文件上传的方法、客户端、服务器及系统,属于文件上传领域。所述方法包括接收客户端发送的文件上传请求;判断是否有与待上传文件的消息摘要算法第五版MD5值相同的文件,如果是,则使用所述MD5值相同的文件作为所述待上传文件,否则,判断所述客户端以前上传的文件中,是否存在与所述待上传文件的文件名相同的文件,如果是,则计算出所述待上传文件与所述文件名相同的文件的不同部分,并使所述客户端上传所述不同部分,否则,使所述客户端全量上传所述待上传文件。本发明通过利用服务器上与待上传文件相似的文件,仅将待上传文件中的不同部分通过网络上传到服务器,因此大大减少了网络传输量,并减少用户上传文件的等待时间。
文档编号H04L29/08GK102571709SQ20101060675
公开日2012年7月11日 申请日期2010年12月16日 优先权日2010年12月16日
发明者徐伟, 徐盎, 李星 申请人:腾讯科技(北京)有限公司