一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种文件传输方法、装置、电子设备和介质与流程

2023-02-01 21:52:21 来源:中国专利 TAG:


1.本公开涉及计算机技术领域,特别是涉及一种文件传输方法、一种文件传输装置、一种电子设备和一种计算机可读存储介质。


背景技术:

2.对于文件上传,特别是大文件的上传,较为通用的做法是分片并行上传。与此同时,文件管理系统中,也常使用哈希值来校验文件的完整性和可信度,并作为文件的指纹用于标识文件。在很多应用场合,文件的完整哈希值是必须的,并且重新计算一般需要较长时间或较多资源。
3.文件的完整哈希值需要通过使用哈希算法处理文件内容后生成。一般的,哈希值计算过程要求文件内容是按顺序连续输入的。哈希值的特性决定,在文件内容被分片时,各分片分别计算的哈希值不能导出整个文件的完整哈希值。这使得在文件上传的应用场景中,如果允许文件被分片上传,且允许各分片并行上传,同步计算整个文件的完整哈希值就变得十分困难。这是因为,在分片并行上传中,到达服务器的分片的顺序和原顺序不一定相同;而不同分片的上传也发生在不同请求的上下文之中,服务器不能直接衔接不同请求的哈希计算状态。


技术实现要素:

4.鉴于上述问题,提出了本公开实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种文件传输方法和相应的一种文件传输装置、一种电子设备,以及一种计算机可读存储介质。
5.本公开实施例公开了一种文件传输方法,应用于服务器,所述方法包括:
6.获取客户端并行上传的同一个文件的各个分片,并获取各个所述分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态;
7.采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否上传成功;
8.在确定各个所述分片均上传成功的情况下,采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否存在上下文关系;
9.在确定各个所述分片均存在上下文关系的情况下,从所述文件的最后一个分片对应的第二哈希计算状态中导出针对所述文件的完整哈希值。
10.本公开实施例还公开了另一种文件传输方法,应用于客户端,所述方法包括:
11.获取待传输的文件,并将所述文件切分为多个分片;
12.对各个所述分片分别进行哈希计算,获得各个所述分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态;
13.将各个所述分片并行上传到服务器,以及将各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态上传到服务器,以使所述服务器执行上述一种文件传输方法。
14.本公开实施例还公开了一种文件传输装置,应用于服务器,所述装置包括:
15.获取模块,用于获取客户端并行上传的同一个文件的各个分片,并获取各个所述分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态;
16.第一验证模块,用于采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否上传成功;
17.第二验证模块,用于在确定各个所述分片均上传成功的情况下,采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否存在上下文关系;
18.导出模块,用于在确定各个所述分片均存在上下文关系的情况下,从所述文件的最后一个分片对应的第二哈希计算状态中导出针对所述文件的完整哈希值。
19.本公开实施例还公开了另一种文件传输装置,应用于客户端,所述装置包括:
20.获取及切分模块,用于获取待传输的文件,并将所述文件切分为多个分片;
21.哈希计算模块,用于对各个所述分片分别进行哈希计算,获得各个所述分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态;
22.上传模块,用于将各个所述分片并行上传到服务器,以及将各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态上传到服务器,以使所述服务器采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否上传成功,并在确定各个所述分片均上传成功的情况下,采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否存在上下文关系,以及在确定各个所述分片均存在上下文关系的情况下,从所述文件的最后一个分片对应的第二哈希计算状态中导出针对所述文件的完整哈希值。
23.本公开实施例还公开了一种电子设备,包括:处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述一种文件传输方法。
24.本公开实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如上所述一种文件传输方法。
25.本公开实施例包括以下优点:
26.在本公开实施例中,同一个文件的各个分片可以并行上传到服务器中,并可以获取到各个分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态,在采用各个分片分别对应的第一哈希计算状态和第二哈希计算状态验证确定各个分片均上传成功以及各个分片均存在上下文关系的情况下,即可以从确定的文件的最后一个分片对应的第二哈希计算状态中导出该文件的完整哈希值。通过采用上述方法,采用各个分片分别对应的第一哈希计算状态和第二哈希计算状态验证确定各个分片是否上传成功以及验证各个分片是否存在上下文关系,在验证成功的情况下,即可以基于哈希函数计算特性和确定的各个分片之间的上下文关系,从文件的最后一个分片对应的第二哈希计算状态中直接导出整个文件的完整哈希值,实现兼容分片并行上传以及获取整个文件的完整哈希值,在通过分片并行上传保证文件传输效率的同时满足快速获取文件完整哈希值的需求。
附图说明
27.图1是本公开实施例提供的一种文件传输方法的步骤流程图;
28.图2是本公开实施例提供的另一种文件传输方法的步骤流程图;
29.图3是本公开实施例的一种服务器中对分片进行哈希计算的流程示意图;
30.图4是本公开实施例的一种服务器中验证各个分片的上下文关系并输出文件完整哈希值的流程示意图;
31.图5是本公开实施例提供的又一种文件传输方法的步骤流程图;
32.图6是本公开实施例的一种客户端中对分片进行哈希计算的流程示意图;
33.图7是本公开实施例提供的一种文件传输系统的结构示意图;
34.图8是本公开实施例提供的一种文件传输装置的结构框图;
35.图9是本公开实施例提供的另一种文件传输装置的结构框图。
具体实施方式
36.为使本公开的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本公开作进一步详细的说明,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本公开保护的范围。
37.分片即是指将文件切分为多个片段。将文件切分成片段分别上传可以提高连接并发度,最终提升上传速度。
38.分片并行上传是指将文件分割为多个片段,每个时刻可以有多个片段同时发起上传请求,分片并行上传是为了提高传输效率。
39.哈希值即是指哈希函数的计算结果。
40.哈希计算状态是指哈希函数的内部状态,也即哈希函数内部变量的集合。哈希计算状态随着数据的输入演进,最终哈希计算结果也由哈希计算状态导出。
41.现有的几种文件上传方案如下:
42.方案一是等待文件被完整上传之后再重新读取文件来计算完整哈希值。这一过程可以异步实现,从而降低请求消耗时间。即等待各个分片上传之后,触发一个异步过程,顺序读取各个分片,从而可以实现整个文件字节的顺序读取,计算出文件的完整哈希值。
43.方案二是不计算文件的完整哈希值,而是计算各个分片的哈希值。因为在各个分片的上传过程中,分片内的字节是顺序上传的,所以计算分片的哈希值的过程在分片的上传过程中完成即可。
44.方案三是顺序上传分片。顺序上传分片时,当前分片的哈希计算状态可以根据上一分片的哈希计算状态和当前分片字节流演进,并最终计算出文件的完整哈希值。
45.上述文件上传方法存在以下不足:
46.方案一可以实现预定目标,但这种方式仍然会浪费服务器的处理资源,并且文件的完整哈希值是延时计算完成的,对于要求立刻获取文件完整哈希值的业务场景则不能满足。
47.方案二是一种牺牲业务的方法。因为各个分片的哈希值不能导出整个文件的完整哈希值,当需要文件的完整哈希值时,该方法不能满足要求。该方法只适用于校验上传过程
文件完整性的场景。
48.方案三则因为要求分片顺序上传,使得上传过程只能单线程和单连接进行,在现有网络环境中容易受到传输速度制约。
49.基于此,本公开涉及在实现文件的分片并行上传的同时,实现整个文件完整哈希值的同步计算,同时兼容分片并行上传和快速获取文件的完整哈希值。
50.本公开实施例,同一个文件的各个分片可以并行上传到服务器中,并可以获取到各个分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态,在采用各个分片分别对应的第一哈希计算状态和第二哈希计算状态验证确定各个分片均上传成功以及各个分片均存在上下文关系的情况下,即可以从确定的文件的最后一个分片对应的第二哈希计算状态中导出该文件的完整哈希值。通过采用上述方法,采用各个分片分别对应的第一哈希计算状态和第二哈希计算状态验证确定各个分片是否上传成功以及验证各个分片是否存在上下文关系,在验证成功的情况下,即可以基于哈希函数计算特性和确定的各个分片之间的上下文关系,从文件的最后一个分片对应的第二哈希计算状态中直接导出整个文件的完整哈希值,实现兼容分片并行上传以及获取整个文件的完整哈希值,在通过分片并行上传保证文件传输效率的同时满足快速获取文件完整哈希值的需求。
51.参照图1,示出了本公开实施例提供的一种文件传输方法的步骤流程图,应用于服务器,具体可以包括如下步骤:
52.步骤101,获取客户端并行上传的同一个文件的各个分片,并获取各个所述分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态。
53.本公开实施例提供的一种文件传输方法可以应用于服务器,服务器可以与客户端进行交互。
54.在客户端中获取到待传输的文件之后,可以将该文件切分为多个分片,客户端在上传分片的过程中可以同时进行哈希计算过程,对各个分片分别进行哈希计算。对于其中的任意一个分片,可以记录该分片在进行哈希计算前的第一哈希计算状态,以及记录该分片在进行哈希计算后的第二哈希计算状态,从而可以获得各个分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态。
55.客户端并行上传各个分片时,可以同时上传各个分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态到服务器中。作为一种示例,对于其中的任意一个分片,客户端在上传该分片中字节数据的同时,上传该分片进行哈希计算前后的哈希计算状态。
56.服务器可以获取客户端并行上传的同一个文件的各个分片,并获取各个分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态。
57.步骤102,采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否上传成功。
58.在本公开实施例中,可以采用各个分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个分片是否上传成功。对于其中的任意一个分片,可以采用该分片对应的第一哈希计算状态和第二哈希计算状态验证该分片是否上传成功。
59.步骤103,在确定各个所述分片均上传成功的情况下,采用各个所述分片分别对应
的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否存在上下文关系。
60.在确定各个分片均上传成功的情况下,可以采用各个分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个分片是否存在上下文关系。其中,上下文关系是指两两分片在文件中存在的前后衔接关系,例如,一个分片为另一个分片的上文内容,或者一个分片为另一个分片的下文内容,按照各个分片的上下文关系拼接各个分片,可以得到完整的原始文件。
61.步骤104,在确定各个所述分片均存在上下文关系的情况下,从所述文件的最后一个分片对应的第二哈希计算状态中导出针对所述文件的完整哈希值。
62.在确定各个分片均存在上下文关系的情况下,可以从多个分片中确定文件的最后一个分片,可以从该最后一个分片对应的第二哈希计算状态中导出针对该文件的完整哈希值。其中,文件的完整哈希值是指将文件内容按顺序连续输入哈希函数中进行哈希计算得到的计算结果,而本公开实施例中,无需将整个文件的完整文件内容按顺序连续输入哈希函数也可以获得该文件的完整哈希值,可以节约计算文件的完整哈希值的计算时间和计算资源。
63.作为一种示例,假设某个文件包括4个分片,分别为分片a、分片b、分片c和分片d,两两分片之间存在上下文关系,分片a为分片b的上文内容,分片b为分片c的上文内容,分片c为分片d的上文内容,则可以确定分片d为该文件的最后一个分片,可以从分片d对应的第二哈希计算状态中导出针对该文件的完整哈希值。
64.综上,在本公开实施例中,采用各个分片分别对应的第一哈希计算状态和第二哈希计算状态验证确定各个分片是否上传成功以及验证各个分片是否存在上下文关系,在验证成功的情况下,即可以基于哈希函数计算特性和确定的各个分片之间的上下文关系,从文件的最后一个分片对应的第二哈希计算状态中直接导出整个文件的完整哈希值,实现兼容分片并行上传以及获取整个文件的完整哈希值,在通过分片并行上传保证文件传输效率的同时满足快速获取文件完整哈希值的需求。
65.参照图2,示出了本公开实施例提供的另一种文件传输方法的步骤流程图,应用于服务器,具体可以包括如下步骤:
66.步骤201,获取客户端并行上传的同一个文件的各个分片,并获取各个所述分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态。
67.在本公开实施例中,各个分片分别具有对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态,服务器在获取各个分片分别对应的字节数据的同时,获取各个分片分别对应的第一哈希计算状态和第二哈希计算状态。
68.步骤202,采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否上传成功。
69.在本公开一种可选的实施例中,步骤202采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否上传成功,具体可以包括如下子步骤:
70.子步骤s11,对于任一个所述分片,将所述服务器的哈希函数的当前内部状态设置为该分片对应的第一哈希计算状态,并调用哈希函数中的update方法接收该分片对应的字节数据进行哈希计算,将计算完成后的哈希函数的当前内部状态确定为该分片对应的第三
哈希计算状态,若该分片对应的第二哈希计算状态与该第三哈希计算状态一致,则确定该分片上传成功。
71.服务器在接收分片的过程中可以同时进行哈希计算过程,对各个分片分别进行哈希计算,即在本公开实施例中,对于任意一个分片,至少需要在客户端和服务器各进行一次哈希计算。
72.服务器获取并行上传的同一个文件的各个分片,以及获取各个分片分别对应的第一哈希计算状态和第二哈希计算状态时,对于任意一个分片,可以将服务器中预置的哈希函数的当前内部状态重置为客户端声明的该分片进行哈希计算前的第一哈希计算状态,并将该分片对应的字节数据放入哈希函数中进行哈希计算,将计算完成后的哈希函数的当前内部状态确定为该分片对应的第三哈希计算状态,校验第三哈希计算状态是否和客户端声明的该分片进行哈希计算后的第二哈希计算状态一致,如果校验一致,则可以确定该分片上传成功;如果校验不一致,则可以确定该分片上传失败。
73.服务器中预置的哈希函数可以有一个或多个。哈希函数运行时,哈希函数的内部状态是有限的,可以采用字节数组s表示。
74.可以将哈希函数的计算过程拆解为init、update和finalize三个方法,它们的具体作用包括:
75.init用于初始化哈希函数的内部状态;
76.update用于接受数据,进行哈希计算,并更新哈希函数的内部状态;
77.finalize用于从哈希函数的内部状态中导出哈希计算结果。
78.不同的哈希函数,这三个方法的具体实现是不一样的,在实践中一般直接使用开源实现。一般哈希函数的开源实现,并未直接暴露内部状态s,但实际上,只要对其进行简单的修改,就可以读写其内部状态s。例如对于md5(message digest algorithm md5,消息摘要算法)而言,其内部状态用4个32位整数表示,一般的开源实现会在内部将其定义成4个整型变量,额外添加方法对其进行读写即可。
79.对哈希函数分解后,实现分片并行上传中的哈希值同步计算即可通过维护哈希函数的内部状态来实现。对哈希函数的分解和内部状态的读写是本公开实施例的基础。
80.因此,对于将分片对应的字节数据放入哈希函数中进行哈希计算,将计算完成后的哈希函数的当前内部状态确定为该分片对应的第三哈希计算状态,具体可以是调用哈希函数中的update方法接收该分片对应的字节数据进行哈希计算,将计算完成后的哈希函数的当前内部状态确定为该分片对应的第三哈希计算状态。
81.参照图3所示,为本公开实施例的一种服务器中对分片进行哈希计算的流程示意图,具体流程包括:
82.1、接收客户端请求,从中获得各个分片的字节数据,以及各个分片分别对应的客户端声明的分片进行哈希计算前的哈希函数的内部状态,即第一哈希计算状态,以及分片进行哈希计算后的哈希函数的内部状态,即第二哈希计算状态,对于第k个分片,该分片对应的第一哈希计算状态为s
cks
,对应的第二哈希计算状态为s
cke

83.2、当对第k个分片进行哈希计算时,可以将服务器中的哈希函数的内部状态s设置为该分片的第一哈希计算状态s
cks
,并调用update方法接收第k个分片的字节数据进行哈希计算,同时可以该分片对应的字节数据写入文件系统,将服务器计算完成后的内部状态作
为该分片对应的第三哈希计算状态,用s
ke
表示。
84.3、比较s
cke
和s
ke
的值。
85.4、如果s
cke
和s
ke
不相等,则认为分片上传失败。
86.5、如果s
cke
和s
ke
相等,说明客户端和服务器的哈希计算过程是一致的,认为分片上传成功,此时需要将s
cks
和s
cke
记录到数据库中。
87.步骤203,在确定各个所述分片均上传成功的情况下,按顺序遍历各个所述分片,对于下一个所述分片,若该分片对应的第一哈希计算状态与上一个分片对应的第二哈希计算状态一致,则确定该分片与该上一个分片存在上下文关系。
88.在确定各个分片均上传成功的情况下,才可以采用各个分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个分片是否存在上下文关系;只要其中的一个分片上传失败,即不可以进行上下文关系的验证操作。
89.在本公开一种可选的实施例中,各个分片具有对应的分片标识,各个分片标识具有对应的标识顺序。可以按标识顺序遍历各个分片,对于下一个分片,如果该分片对应的第一哈希计算状态与上一个分片对应的第二哈希计算状态一致,则确定该分片与该上一个分片存在上下文关系,该分片为该上一个分片的下文内容;否则确定该分片与该上一个分片不存在上下文关系。
90.在本公开一种可选的实施例中,在步骤203之前,具体可以包括如下步骤:
91.调用哈希函数中的init方法将哈希函数的当前内部状态初始化为初始状态;对于其中一个所述分片,若该分片对应的第一哈希计算状态与所述初始状态一致,则确定该分片为所述文件的第一个分片。
92.哈希函数中的init方法可以初始化哈希函数的内部状态为算法设计的初始状态。
93.在本公开实施例中,服务器可以调用哈希函数中的init方法将哈希函数的当前内部状态初始化为初始状态,然后对于标识顺序为第一顺序的分片,如果该分片对应的第一哈希计算状态与初始化后的初始状态一致,则确定该分片为原始文件的第一个分片。
94.步骤204,在确定各个所述分片均存在上下文关系的情况下,从所述文件的最后一个分片对应的第二哈希计算状态中导出针对所述文件的完整哈希值。
95.在本公开实施例中,在确定各个分片均存在上下文关系的情况下,可以从文件的最后一个分片对应的第二哈希计算状态中导出针对该文件的完整哈希值,无需将整个文件的完整文件内容按顺序连续输入哈希函数也可以获得该文件的完整哈希值,可以节约计算文件的完整哈希值的计算时间和计算资源。
96.在本公开一种可选的实施例中,步骤204从所述文件的最后一个分片对应的第二哈希计算状态中导出针对所述文件的完整哈希值,具体可以包括如下子步骤:
97.子步骤s21,调用哈希函数中的finalize方法从所述文件的最后一个分片对应的第二哈希计算状态中导出针对所述文件的完整哈希值,以确定所述文件上传成功。
98.在本公开实施例中,服务器可以调用哈希函数中的finalize方法从文件的最后一个分片对应的第二哈希计算状态中导出针对该文件的完整哈希值,此时可以标记该文件上传成功,进一步地,还可以将表示文件上传成功的消息传输到客户端,以形成文件传输闭环。
99.参照图4所示,为本公开实施例的一种服务器中验证各个分片的上下文关系并输
出文件完整哈希值的流程示意图,具体流程包括:
100.1、调用哈希函数的init方法,将此时服务器的哈希函数的内部状态设为初始状态s
1s

101.2、比较s
1s
和记录的标识顺序为第一顺序的分片对应的第一哈希计算状态s
c1s

102.3、如果s
1s
和s
c1s
不相等,则认为文件上传失败。
103.4、如果s
1s
和s
c1s
相等,则设k=2。
104.5、比较第k分片的第一哈希计算状态s
cks
和上一个分片的第二哈希计算状态s
c(k-1)e

105.6、如果s
cks
和s
c(k-1)e
不相等,则认为文件上传失败。
106.7、如果s
cks
和s
c(k-1)e
相等,则继续处理下一个分片。
107.8、设分片总数为kc,比较k和kc。
108.9、如果k《kc,则令k=k 1,并返回执行步骤5。
109.10、如果k》=kc,则将哈希函数的内部状态设为s
cke
(k=kc),此时调用哈希函数的finalize方法,获取的哈希值就是整个文件的完整哈希值,同时标记文件上传成功。
110.其中,对于文件上传失败,一般是哈希算法实现不正确或者客户端非预期操作造成的。一般地,基于tcp(transmission control protocol,传输控制协议)的上传已经提供了质量保证,基本可以排除传输错误。对于上传失败的情况,要求客户端修正重传即可。
111.综上,在本公开实施例中,采用各个分片分别对应的第一哈希计算状态和第二哈希计算状态验证确定各个分片是否上传成功以及验证各个分片是否存在上下文关系,在验证成功的情况下,即可以基于哈希函数计算特性和确定的各个分片之间的上下文关系,从文件的最后一个分片对应的第二哈希计算状态中直接导出整个文件的完整哈希值,实现兼容分片并行上传以及获取整个文件的完整哈希值,在通过分片并行上传保证文件传输效率的同时满足快速获取文件完整哈希值的需求。
112.在本公开实施例中,通过拆解哈希函数的初始化和计算过程,使得各个分片的哈希计算过程可以并行化;通过客户端的配合计算,实现各个分片哈希函数上下文的衔接;通过服务端对哈希计算上下文的校验,避免客户端哈希计算实现上的问题或哈希计算作弊。
113.本公开中,通过分解哈希计算过程并让客户端和服务端配合哈希计算,实现了分片并行上传中哈希值的同步计算。计算出的哈希值是经过服务端校验的,可信的;且计算过程是同步的,不需要进行回溯。这样,满足了文件管理系统的上传效率和哈希提取业务的双重需要。
114.上述实施例是从服务器的角度对本公开提供的一种文件传输方法进行描述,以下实施例是从客户端的角度对本公开提供的一种文件传输方法进行描述。需要说明的是,为了避免重复,各个实施例及各个实施例中的特征可以相互参照,此外,在不冲突的情况下,各个实施例及各个实施例中的特征可以相互组合。
115.参照图5,示出了本公开实施例提供的又一种文件传输方法的步骤流程图,应用于客户端,具体可以包括如下步骤:
116.步骤501,获取待传输的文件,并将所述文件切分为多个分片。
117.客户端获取待传输的文件,并可以将该文件切分为多个分片。在一种示例中,可以将该文件平均切分为多个分片,对于文件的切分方式,本公开实施例不加以具体限制。
118.步骤502,对各个所述分片分别进行哈希计算,获得各个所述分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态。
119.在本公开实施例中,可以对各个分片分别进行哈希计算,获得各个分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态。
120.在本公开一种可选的实施例中,步骤502对各个所述分片分别进行哈希计算,获得各个所述分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态,具体可以包括如下子步骤:
121.子步骤s31,按顺序扫描各个所述分片,对于任一个所述分片,将该分片进行哈希计算前的哈希函数的当前内部状态确定为该分片对应的第一哈希计算状态,并调用哈希函数中的update方法接收该分片对应的字节数据进行哈希计算,将计算完成后的哈希函数的当前内部状态确定为该分片对应的第二哈希计算状态。
122.在本公开实施例中,可以按顺序扫描各个分片,确定各个分片分别对应的第一哈希计算状态和第二哈希计算状态。
123.步骤503,将各个所述分片并行上传到服务器,以及将各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态上传到服务器,以使所述服务器采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否上传成功,并在确定各个所述分片均上传成功的情况下,采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否存在上下文关系,以及在确定各个所述分片均存在上下文关系的情况下,从所述文件的最后一个分片对应的第二哈希计算状态中导出针对所述文件的完整哈希值。
124.各个分片是并行上传到服务器中的。服务器中对分片处理的具体过程可参照上述实施例,在此不再赘述。
125.参照图6所示,为本公开实施例的一种客户端中对分片进行哈希计算的流程示意图,具体流程包括:
126.1、调用哈希函数的init方法,将此时客户端哈希函数的内部状态设为初始状态。
127.2、客户端初始化循环变量k=1。客户端按顺序扫描分片,即从第1个分片扫描到最后一个分片,设总的分片数为kc。
128.3、客户端读取第k个分片,先读取此时哈希函数的内部状态为第一哈希计算状态s
cks
,然后调用update函数放入第k个分片的字节数据进行哈希计算,计算完成后再读取哈希函数的内部状态为第二哈希计算状态s
cke

129.4、发起第k个分片的分片字节上传,并同时上传该分片对应的s
cks
和s
cke
,各个分片是并行上传的,不需要等待上一个分片上传完成再进行下一个分片的上传,而上传分片字节数据的过程和上传对应的s
cks
和s
cke
的过程可以是异步的。
130.5、判断k是否等于kc。
131.6、如果k《kc,说明仍有分片未发起上传,令k=k 1,并返回执行步骤3,发起下一分片的上传。
132.7、如果k》=kc,说明所有分片均已发起上传。此时需要等待所有分片上传完成。这是一步阻塞操作,步骤8需要等到所有分片上传完成后才能执行。
133.8、调用服务器输出文件完整哈希值的处理过程,获得最终处理结果,即文件的完
整哈希值,即表示文件上传完成。
134.需要说明的是,客户端处理过程的设计隐含假设了cpu(central processing unit,中央处理器)处理文件内容的速度远大于磁盘的读取速度,同时磁盘的读取速度远大于网络传输速度。
135.综上,在本公开实施例中,采用各个分片分别对应的第一哈希计算状态和第二哈希计算状态验证确定各个分片是否上传成功以及验证各个分片是否存在上下文关系,在验证成功的情况下,即可以基于哈希函数计算特性和确定的各个分片之间的上下文关系,从文件的最后一个分片对应的第二哈希计算状态中直接导出整个文件的完整哈希值,实现兼容分片并行上传以及获取整个文件的完整哈希值,在通过分片并行上传保证文件传输效率的同时满足快速获取文件完整哈希值的需求。
136.参照图7,示出了本公开实施例提供的一种文件传输系统的结构示意图,该文件传输系统700包括服务器和客户端,在上传文件的场景中,客户端是提交文件的一方,服务器是接收文件的一方。服务器中包括获取模块7001、第一验证模块7002、第二验证模块7003和导出模块7004;客户端中包括获取及切分模块7005、哈希计算模块7006和上传模块7007。
137.该文件传输系统中各模块的运作如下:
138.获取及切分模块7005,用于获取待传输的文件,并将所述文件切分为多个分片;
139.哈希计算模块7006,用于对各个所述分片分别进行哈希计算,获得各个所述分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态;
140.上传模块7007,用于将各个所述分片并行上传到服务器,以及将各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态上传到服务器;
141.获取模块7001,用于获取客户端并行上传的同一个文件的各个分片,并获取各个所述分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态;
142.第一验证模块7002,用于采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否上传成功;
143.第二验证模块7003,用于在确定各个所述分片均上传成功的情况下,采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否存在上下文关系;
144.导出模块7004,用于在确定各个所述分片均存在上下文关系的情况下,从所述文件的最后一个分片对应的第二哈希计算状态中导出针对所述文件的完整哈希值。
145.需要说明的是,为了避免重复,此处对系统实施例只作简单说明,该系统的具体实施过程可参照从服务器或客户端的角度进行描述的过程。
146.综上,在本公开实施例中,采用各个分片分别对应的第一哈希计算状态和第二哈希计算状态验证确定各个分片是否上传成功以及验证各个分片是否存在上下文关系,在验证成功的情况下,即可以基于哈希函数计算特性和确定的各个分片之间的上下文关系,从文件的最后一个分片对应的第二哈希计算状态中直接导出整个文件的完整哈希值,实现兼容分片并行上传以及获取整个文件的完整哈希值,在通过分片并行上传保证文件传输效率的同时满足快速获取文件完整哈希值的需求。
147.需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组
合,但是本领域技术人员应该知悉,本公开实施例并不受所描述的动作顺序的限制,因为依据本公开实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本公开实施例所必须的。
148.参照图8,示出了本公开实施例提供的一种文件传输装置的结构框图,应用于服务器,具体可以包括如下模块:
149.获取模块801,用于获取客户端并行上传的同一个文件的各个分片,并获取各个所述分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态;
150.第一验证模块802,用于采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否上传成功;
151.第二验证模块803,用于在确定各个所述分片均上传成功的情况下,采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否存在上下文关系;
152.导出模块804,用于在确定各个所述分片均存在上下文关系的情况下,从所述文件的最后一个分片对应的第二哈希计算状态中导出针对所述文件的完整哈希值。
153.在本公开实施例中,所述第一验证模块,包括:
154.第一验证子模块,用于对于任一个所述分片,将所述服务器的哈希函数的当前内部状态设置为该分片对应的第一哈希计算状态,并调用所述哈希函数中的update方法接收该分片对应的字节数据进行哈希计算,将计算完成后的哈希函数的当前内部状态确定为该分片对应的第三哈希计算状态,若该分片对应的第二哈希计算状态与该第三哈希计算状态一致,则确定该分片上传成功。
155.在本公开实施例中,所述第二验证模块,包括:
156.第二验证子模块,用于按顺序遍历各个所述分片,对于下一个所述分片,若该分片对应的第一哈希计算状态与上一个分片对应的第二哈希计算状态一致,则确定该分片与该上一个分片存在上下文关系。
157.在本公开实施例中,所述第二验证模块,还包括:
158.初始化子模块,用于调用所述哈希函数中的init方法将所述哈希函数的当前内部状态初始化为初始状态;
159.第三验证子模块,用于对于其中一个所述分片,若该分片对应的第一哈希计算状态与所述初始状态一致,则确定该分片为所述文件的第一个分片。
160.在本公开实施例中,所述导出模块,包括:
161.导出子模块,用于调用哈希函数中的finalize方法从所述文件的最后一个分片对应的第二哈希计算状态中导出针对所述文件的完整哈希值,以确定所述文件上传成功。
162.综上,在本公开实施例中,采用各个分片分别对应的第一哈希计算状态和第二哈希计算状态验证确定各个分片是否上传成功以及验证各个分片是否存在上下文关系,在验证成功的情况下,即可以基于哈希函数计算特性和确定的各个分片之间的上下文关系,从文件的最后一个分片对应的第二哈希计算状态中直接导出整个文件的完整哈希值,实现兼容分片并行上传以及获取整个文件的完整哈希值,在通过分片并行上传保证文件传输效率
的同时满足快速获取文件完整哈希值的需求。
163.参照图9,示出了本公开实施例提供的另一种文件传输装置的结构框图,应用于客户端,具体可以包括如下模块:
164.获取及切分模块901,用于获取待传输的文件,并将所述文件切分为多个分片;
165.哈希计算模块902,用于对各个所述分片分别进行哈希计算,获得各个所述分片分别对应的进行哈希计算前的第一哈希计算状态和进行哈希计算后的第二哈希计算状态;
166.上传模块903,用于将各个所述分片并行上传到服务器,以及将各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态上传到服务器,以使所述服务器采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否上传成功,并在确定各个所述分片均上传成功的情况下,采用各个所述分片分别对应的第一哈希计算状态和第二哈希计算状态验证各个所述分片是否存在上下文关系,以及在确定各个所述分片均存在上下文关系的情况下,从所述文件的最后一个分片对应的第二哈希计算状态中导出针对所述文件的完整哈希值。
167.在本公开实施例中,所述哈希计算模块,包括:
168.哈希计算子模块,用于按顺序扫描各个所述分片,对于任一个所述分片,将该分片进行哈希计算前的哈希函数的当前内部状态确定为该分片对应的第一哈希计算状态,并调用哈希函数中的update方法接收该分片对应的字节数据进行哈希计算,将计算完成后的哈希函数的当前内部状态确定为该分片对应的第二哈希计算状态。
169.综上,在本公开实施例中,采用各个分片分别对应的第一哈希计算状态和第二哈希计算状态验证确定各个分片是否上传成功以及验证各个分片是否存在上下文关系,在验证成功的情况下,即可以基于哈希函数计算特性和确定的各个分片之间的上下文关系,从文件的最后一个分片对应的第二哈希计算状态中直接导出整个文件的完整哈希值,实现兼容分片并行上传以及获取整个文件的完整哈希值,在通过分片并行上传保证文件传输效率的同时满足快速获取文件完整哈希值的需求。
170.对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
171.本公开实施例还提供了一种电子设备,包括:处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述一种文件传输方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
172.本公开实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现上述一种文件传输方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
173.本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
174.本领域内的技术人员应明白,本公开实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本公开实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上
实施的计算机程序产品的形式。
175.本公开实施例是参照根据本公开实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
176.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
177.这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
178.尽管已描述了本公开实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本公开实施例范围的所有变更和修改。
179.最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
180.以上对本公开所提供的一种文件传输方法和一种文件传输装置、一种电子设备和一种计算机可读存储介质,进行了详细介绍,本文中应用了具体个例对本公开的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本公开的方法及其核心思想;同时,对于本领域的一般技术人员,依据本公开的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本公开的限制。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献