文件处理方法及装置、电子设备及介质与流程

未命名 09-24 阅读:112 评论:0


1.本公开涉及信息技术领域,尤其涉及一种文件处理方法及装置、电子设备及存储介质。


背景技术:

2.前端(即文件的上传端)会先计算待传输文件的哈希(hash)值;
3.在哈希值计算完成后,以该hash值为入参请求后端(即文件上传的服务器等目的端)接口;
4.确定后端服务器是否已存在该hash值;
5.若存在则检查文件上传状态,如果未完成上传,则接收前端的上传文件。
6.若不存在,则需要将该hash值存储在本地,并接收前端上传文件。
7.但是这种文件上传方式,则针对大数据量的文件的哈希值计算时,会出现文件的哈希值计算时间长进而导致文件传输延时大的原因。


技术实现要素:

8.本公开实施例提供了一种文件处理方法及装置、电子设备及存储介质,以减少对应用程序的代码改进的同时,简便实现链路的跟踪。
9.本公开实施例第一方面提供一种文件处理方法,由第一设备执行,包括:
10.将待传输的目标文件分为n个文件分片;其中,所述n为大于或等于2的正整数;
11.确定各个所述文件分片的第一哈希值;
12.根据所述第一哈希值,将所述n个文件分片发送给第二设备;其中,所述n个文件分片的所述第一哈希值,用于组合形成所述目标文件的第二哈希值。
13.基于上述方案,所述确定各个所述文件分片的第一哈希值确定各个所述文件分片的第一哈希值,包括:
14.根据第n个所述文件分片在所述n个所述文件分片中的位置,确定生成第n个所述文件分片的第一哈希值的抽样参数;其中,所述n为小于或等于所述n的正整数;
15.根据所述抽样参数,对第n个所述文件分片进行抽样得到第n个所述文件分片的第一哈希值。
16.基于上述方案,所述根据所述抽样参数,对第n个所述文件分片进行抽样得到第n个所述文件分片的第一哈希值,包括以下至少之一:
17.当所述n等于1时,对第1个所述文件分片进行抽样得到第1个所述文件分片的所述第一哈希值;
18.当所述n等于n时,对第n个所述文件分片进行抽样得到第n个所述文件分片的所述第一哈希值;
19.当所述n小于所述n且大于1时,对所述n进行第一预设值进行取模得到余数,并根据所述余数从第n个所述文件分片的一个或多个子分片进行抽样,得到第n个所述文件分片
的所述第一哈希值。
20.基于上述方案,所述当所述n小于所述n且大于1时,对所述n进行第一预设值进行取模得到余数,并根据所述余数从第n个所述文件分片的一个或多个子分片进行抽样,得到第n个所述文件分片的所述第一哈希值,包括:
21.当所述余数为0时,将第n个所述文件分片等分为第二预设值的子分片,采用预设哈希算法对所述子分片进行抽样得到第n个所述文件分片的所述第一哈希值;
22.当所述余数为1时,采用预设哈希算法抽取第n个文件分片的前s个字段作为第n个所述文件分片的所述第一哈希值;所述s为小于所述第二预设值的任意正整数;
23.当所述余数大于或等于2时,采用预设哈希算法将第n个所述文件分片等分为第n个所述文件分片对应余数个子分片,并从每一个所述子分片抽取一个或多个字节得到第n个所述文件分片的所述第一哈希值。
24.基于上述方案,所述确定各个所述文件分片的第一哈希值,包括:
25.在上传所述文件分片时,利用第一线程确定各个所述文件分片的第一哈希值;
26.使用第二线程确定所述目标文件的第三哈希值,其中,所述第三哈希值,用于校正所述第二哈希值;其中,所述第二线程不同于所述第一线程;
27.将所述第三哈希值发送给所述第二设备。
28.本公开实施例第二方面提供一种文件处理方法,其特征在于,由第二设备执行,所述方法包括:
29.接收第一设备上传的第n个文件分片的第一哈希值;其中,所述n为小于或等于n的正整数;所述n为目标文件分成的所述文件分片的总个数;
30.根据所述第一哈希值确定所述第n个文件分片是否已上传;
31.在所述第n个文件分片未上传时,接收并缓存所述第一设备上传的第n个所述文件分片。
32.基于上述方案,所述方法还包括:
33.在完成n个所述文件分片的接收和缓存之后,根据第1至第n个所述文件分片的第一哈希值确定所述目标文件的第二哈希值;
34.根据所述第二哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件。
35.基于上述方案,所述根据所述第二哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件,包括以下至少之一:
36.在未检索到与所述第二哈希值相同的第四哈希值时,确定保存所述目标文件;
37.在检索到与所述第二哈希值相同的所述第四哈希值时,确定删除已缓存的所述目标文件。
38.基于上述方案,所述方法还包括:
39.接收所述第一设备发送的第三哈希值;所述第一线程为所述第一设备内发送所述文件分片并生成所述第一哈希值的线程;
40.确定所述第二哈希值和所述第三哈希值是否相同;
41.所述根据所述第二哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件,包括:
42.在所述第二哈希值和所述第三哈希值相同时,根据所述第二哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件。
43.本公开实施例第三方面提供一种文件处理装置,包括:
44.分成模块,用于将待传输的目标文件分为n个文件分片;其中,所述n为大于或等于2的正整数;
45.第一确定模块,用于确定各个所述文件分片的第一哈希值;
46.发送模块,用于根据所述第一哈希值,将所述n个文件分片发送给第二设备;其中,所述n个文件分片的所述第一哈希值,用于组合形成所述目标文件的第二哈希值。
47.本公开实施例第四方面提供一种文件处理装置,所述装置包括:
48.接收模块,用于接收第一设备上传的第n个文件分片的第一哈希值;其中,所述n为小于或等于n的正整数;所述n为目标文件分成的所述文件分片的总个数;
49.第二确定模块,用于根据所述第一哈希值确定所述第n个文件分片是否已上传;
50.接收缓存模块,用于在所述第n个文件分片未上传时,接收并缓存所述第一设备上传的第n个所述文件分片。
51.本公开实施例第五方面提供一种电子设备,所述电子设备包括:
52.存储器;
53.处理器,与所述存储器连接,用于通过执行存储在所述存储器上的计算机可执行指令,能够实现第一方面或第二方面任意技术方案提供的文件处理方法。
54.本公开实施例第六方面提供一种计算机存储介质,所述计算机存储介质存储有计算机可执行指令;所述计算机可执行指令被处理器执行后,能够实现第一方面或第二方面任意技术方案提供的文件处理方法。
55.本公开实施例提供的技术方案,将目标文件分为多个文件分片,分别计算每一个文件分片的第一哈希值,基于第一哈希值依次向第二设备发送n个文件分片,相对于先确定处整个目标文件的第二哈希值之后再向第二设备发送目标文件,单个第一哈希值的计算量远小于第二哈希值的计算量,可以减少目标文件上传起始时刻的延时,提升了目标文件上传的效率。
附图说明
56.图1为本公开实施例提供的一种文件处理方法的流程示意图;
57.图2为本公开实施例提供的一种文件处理方法的流程示意图;
58.图3为本公开实施例提供的一种文件处理方法的流程示意图;
59.图4为本公开实施例提供的一种文件处理方法的流程示意图;
60.图5为本公开实施例提供的一种文件处理方法的流程示意图;
61.图6为本公开实施例提供的一种文件处理装置的结构示意图;
62.图7为本公开实施例提供的一种文件处理装置的结构示意图;
63.图8是本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
64.为了能够更加详尽地了解本公开的特点与技术内容,下面结合附图对本公开的实
现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本公开。
65.如图1所示,本公开实施例提供一种文件处理方法,由第一设备执行,包括:
66.s1110:将待传输的目标文件分为n个文件分片;其中,所述n为大于或等于2的正整数;
67.s1120:确定各个所述文件分片的第一哈希值;
68.s1130:根据所述第一哈希值,将所述n个文件分片发送给第二设备;其中,所述n个文件分片的所述第一哈希值,用于组合形成所述目标文件的第二哈希值。
69.第一设备可为各种需要将目标文件上传至第二设备的任意上传设备,例如,该第一设备可为各种终端设备,该终端设备可为前端。
70.第二设备可为服务器,示例性地,所述服务器可为云服务器或者数据库的服务器。
71.所述目标文件可为:文本文件、视频文件、多种媒体类型的混合文件等。
72.示例性地,在所述目标文件的数据量大于设定值时,执行所述s1110,否则可以直接计算整个目标文件的第二哈希值,直接基于第二哈希值进行目标文件的传输。
73.在一些实施例中,所述s1110可包括:
74.将目标文件等分为n个等分,得到n个文件分片;
75.或者,
76.根据特定数据值将目标文件分为n个文件分片,如此,最后一个文件分片的数据量可小于或等于特定数据值;
77.或者,
78.根据目标内容的不同章节或者内容相关性等,将目标文件分为n个文件分片,如此,每一个文件分片的数据量可不等,且不大于特定数据值。
79.当然以上仅仅是目标文件分为n个文件分片的举例,具体实现不局限于上述举例。
80.在将文件分为n个文件分片之后,第一设备将逐一计算每一个文件分片的第一哈希值。由于文件分分片是目标文件分成的,因此,单个文件分片(简称分片)的数据量小,在通过抽样计算第一哈希值时远小于整个文件的计算量,从而大大的提前数据量较大的目标文件的传输起始时间,从而提升传输效率。
81.所述s1120可包括:利用各种哈希算法(例如,散列算法或者md5算法)等对各个文件分片的内容进行抽样,得到所述第一哈希值。计算所述第一哈希值的方式有多种,具体实现时不局限于上述举例。
82.例如,s1120可包括:对各个文件分片的部分内容或者全部内容进行抽样,得到第一哈希值。
83.在一些实施例中,s1130可包括:
84.以第一哈希值为上传请求的入参,向第二设备发送请求消息;
85.接收第二设备基于所述请求消息返回的响应消息,该响应消息会根据第二设备是否已经存储了第一哈希值确定对应的文件分片是否已经上传;
86.若响应消息对应的文件分片未上传,向第二设备发送文件分片。
87.示例性地,请求消息包含的第一哈希值可为一个或多个,例如,同时包含多个,则后续可以同时上传多个文件分片,提升上传效率。示例性地,将在目标文件中连续排列的多个文件分片对应的第一焊锡值依次携带在请求消息中发送给第二设备。
88.又示例性地,请求消息可包括一个第一哈希值,例如,按照文件分片在目标文件中的顺序,顺序向第二设备发送所述请求消息。
89.第一设备为每一个文件分片生成的第一哈希值都传输给第二设备,第二设备会基于接收到的第一哈希值生成第二哈希值,该第二哈希值可用于第二设备验证第二设备是否已接受目标文件的上传。
90.如图2所示,本公开实施例提供一种文件处理方法,由第一设备执行,包括:
91.s1210:将待传输的目标文件分为n个文件分片;其中,所述n为大于或等于2的正整数;
92.s1220:根据第n个所述文件分片在所述n个所述文件分片中的位置,确定生成第n个所述文件分片的第一哈希值的抽样参数;其中,所述n为小于或等于所述n的正整数;
93.s1230:根据所述抽样参数,对第n个所述文件分片进行抽样得到第n个所述文件分片的第一哈希值。
94.s1240:根据所述第一哈希值,将所述n个文件分片发送给第二设备;其中,所述n个文件分片的所述第一哈希值,用于组合形成所述目标文件的第二哈希值。
95.在本公开实施例中,为了进一步减少确定单个第一哈希值所需的计算量,进一步减少第一哈希值引入的延时,会根据各个文件分片在目标文件中的位置(即第n个所述文件分片在所述n个所述文件分片中的位置),会确定处抽样参数。该抽样参数和哈希算法结合,可以生成所述第一哈希值。
96.该抽样参数包括但不限于以下至少之一:
97.文件分片中被抽样的数据量;
98.对应文件分片中待抽样的分片内容,该分片内容可为对应文件分片的部分内容或者全部内容;
99.用于形成第一哈希值得抽样数据量。
100.当然以上仅仅是抽样参数的举例,具体实现时不局限于上述举例。
101.在得到所述抽样参数之后,根据所述抽样参数和哈希算法,对各个文件分片进行抽样得到所述第一哈希值。
102.在一些实施例中,在对目标文件进行分片时,按照文件从前至后的顺序,对各个文件分片进行依次编号。如此,所述n可为所述文件分片的编号。
103.示例性地,所述根据所述抽样参数,对第n个所述文件分片进行抽样得到第n个所述文件分片的第一哈希值,包括以下至少之一:
104.当所述n等于1时,对第1个所述文件分片进行抽样得到第1个所述文件分片的所述第一哈希值;
105.当所述n等于n时,对第n个所述文件分片进行抽样得到第n个所述文件分片的所述第一哈希值;
106.当所述n小于所述n且大于1时,对所述n进行第一预设值进行取模得到余数,并根据所述余数从第n个所述文件分片的一个或多个子分片进行抽样,得到第n个所述文件分片的所述第一哈希值。
107.在进行首个文件分片的第一哈希值时,第一设备分配给文件上传的第一线程可能没有其他的处理认任务,即第一设备处于比较闲的状态,因此对首个文件分片的整个分片
进行抽样得到所述第一哈希值,速度很快且效率很快。
108.在一些实施例中,最后一个文件片的数据量比较小或者比其他文件分片的数据量小,此时对最后一个文件分片(也即第n个文件分片)进行抽样得到第一哈希值也是计算量小且效率高。因此在本公开实施例中,第1个文件分片和第n个文件分片都可以对整个文件分片进行抽样,得到所述第一哈希值。
109.在一些实施例中,还可以根据预设数列,根据数列对应的数值挑选出进行整个文件分片进行抽样的文件分片,并计算出第一哈希值。
110.在本公开实施例中,若n是在1和n之间,则通过n与第一预设值取模的余数,得到对应文件分片的第一哈希值。例如,当余数为0时,可以将特定序列设定为该文件分片的第一哈希值。例如,当预设不为0时,将对应文件分片等分成等于余数个子分片,抽取该文件分片中第一个子分片或者最后一个子分片或者特定位置的子分片进行抽样得到该文件分片的第一哈希值。当然以上仅仅是对第一哈希值的举例,具体实现时不局限于上述举例值。
111.在一些实施例中,所述当所述n小于所述n且大于1时,对所述n进行第一预设值进行取模得到余数,并根据所述余数从第n个所述文件分片的一个或多个子分片进行抽样,得到第n个所述文件分片的所述第一哈希值,包括:
112.当所述余数为0时,将第n个所述文件分片等分为第二预设值的子分片,采用预设哈希算法对所述子分片进行抽样得到第n个所述文件分片的所述第一哈希值;
113.当所述余数为1时,采用预设哈希算法抽取第n个文件分片的前s个字段作为第n个所述文件分片的所述第一哈希值;所述s为小于所述第二预设值的任意正整数;
114.当所述余数大于或等于2时,采用预设哈希算法将第n个所述文件分片等分为第n个所述文件分片对应余数个子分片,并从每一个所述子分片抽取一个或多个字节得到第n个所述文件分片的所述第一哈希值。
115.示例性地,若余数为0,将该文件分片等分为第二预设值个子分片,并从每一个子分片的前一个或多个字节或者每一个子分片的最后一个或多个字节进行抽样,得到所述第一哈希值。总之,若预设为0,会对每一个子分片进行特定位置字节的抽样得到所述第一哈希值。
116.当预设为1时,在将对应文件分片分为多个子分片之后,可以s可为1或2的取值。
117.在余数大于等于2时,采用预设哈希算法将第n个所述文件分片等分为第n个所述文件分片对应余数个子分片,并从每一个所述子分片抽取一个或多个字节得到第n个所述文件分片的所述第一哈希值可包括:
118.根据余数对文件分片进行子分片的分割之后,将进一步从各个子分片抽取一个或多个字节(例如,按照预设数列确定每一个子分片的字节数)之后得到所述第一哈希值。
119.示例性地,该预设数列可呈现如下趋势至少之一:
120.数列的元素两头大中间小的趋势;
121.数列的元素呈现前头小且后头大的趋势。
122.在一些实施例中,所述确定各个所述文件分片的第一哈希值,包括:
123.在上传所述文件分片时,利用第一线程确定各个所述文件分片的第一哈希值;
124.所述方法还包括:
125.使用第二线程确定所述目标文件的第三哈希值,其中,所述第三哈希值,用于校正
所述第二哈希值;其中,所述第二线程不同于所述第一线程;将所述第三哈希值发送给所述第二设备。
126.示例性地,第一线程在生成第一哈希值之后,根据第一哈希值对应的文件分片在n个文件分片中的排序位置,进行多个第一哈希值的拼接就可以得到所述第二哈希值。当然此处仅仅一种基于第一哈希值生成第二哈希值的方式。
127.在另一些示例中,可以在相邻两个第一哈希值之间插入预设数值,然后生成所述第二哈希值。
128.此处的第二线程不同于第一线程。所述第一线程可为目标文件上传的主线程,可包括:第一哈希值的计算处理、和第二设备之间交互信息的编解码处理以及第二哈希值的处理等。
129.第二线程可为第一线程并列设置的另一个线程,该线程的线程资源量可略小于所述第一线程的线程资源。该第二线程可用于根据目标文件的文件内容进行第三哈希值的计算。第二线程生成第三哈希值的方式可以与第一线程生成多个文件分片的第一哈希值再组合得到第二线程的方式相同。如此生成的第三哈希值则可用来校正第二哈希值。
130.由于第二线程独立于第一线程,因此第二线程计算第三哈希值的过程不会干扰第一线程对目标文件的上传处理,即能够保证第一线程目标内容处理的效率。示例性地,该第二线程可包括但不限于网络工作节点(web worker)线程。
131.在生成第三哈希值之后,第二线程将所述第三哈希值提供给第一线程,第一线程在接收到第三哈希值之后,就将第三哈希值以文件上传的请求消息或者其他类型的消息,将所述第三哈希值提供给服务器。该第三哈希值可用于的第二设备基于第一哈希值生成的第二哈希值的校对。
132.如图3所示,本公开实施例提供一种文件处理方法,由第二设备执行,所述方法包括:
133.s2110:接收第一设备上传的第n个文件分片的第一哈希值;其中,所述n为小于或等于n的正整数;所述n为目标文件分成的所述文件分片的总个数;
134.s2120:根据所述第一哈希值确定所述第n个文件分片是否已上传;
135.s2130:在所述第n个文件分片未上传时,接收并缓存所述第一设备上传的第n个所述文件分片。
136.在本公实施例中,第二设备可为服务器,例如,云存储的服务器或者数据库的服务器等。
137.第二设备可为各种类型的服务器,例如刀片式的服务器等。
138.第二设备会从第一设备接收一个个文件分片以及第一哈希值。该第一哈希值可携带在上传请求中被接收。一个所述上传请求可包括一个或多个文件分片的第一哈希值。
139.在接收到第一哈希值,第二设备将接收的第一哈希值和本地已经存储的哈希值进行比较,根据比较结果确定第二设备本地是否已经存储有该第一哈希值,若本地已经存储有该第一哈希值,说明对应的文件分片已经上传,若未存储该第一哈希值说明本地未存储该第一哈希值对应的文件分片。
140.若第n个文件分片未存储,则通过请求消息的响应消息返回给第一设备,此时第一设备会根据这种设备上传对应第n个文件分片。
141.若一个请求消息有多个第一哈希值,可能存在部分第一哈希值在第二设备本地已经存储,有的却在第二设备没有存储,则此时第二设备可以将本地未存储的第一哈希值再次返回给第一设备,如此第一设备会根据响应消息中携带的第一哈希值,进一步确定出待上传到第二设备的文件分片,并将对应的文件分片上传给第二设备。
142.当然以上仅仅是文件分片的举例。在本公开实施例中,由于目标文件是基于文件分片的第一哈希值上传文件,使得文件分片的上传效率高的特点。
143.在一些实施例中,所述方法还包括:
144.在完成n个所述第一哈希值之后,根据第1至第n个所述文件分片的第一哈希值确定所述目标文件的第二哈希值;
145.根据所述第二哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件。
146.在完成n个文件分片的接收和缓存之后,第二设备会根据接收到n个第一哈希值生成整个目标文件的第二哈希值。例如,按照多个第一哈希值对应的文件分片在目标文件中的位置,拼接n个第一哈希值得到所述第二哈希值。
147.示例性地,在第一设备发送的首个上传请求(或者用于目标文件上传的首个请求消息中)携带有n。如此,第二设备可以根据自身计数,确定自身是否收到第一设备提供的n个第一哈希值。若收到n个第一哈希值之后,就可以启动第二哈希值的生成。
148.在收到第一哈希值的过程中,第一设备也在上传各个文件分片。第二设备在收到各个文件分片之后,先本地缓存各个文件分片。在生成第二哈希值之后,根据第二哈希值确定是否当前已经收到存储过目标文件。若存储过则向第一设备返回停止上传指示,如此第一设备在接收到停止上传指示之后停止未上传完毕的后续文件分片的上传。
149.若根据第二哈希值确定第二设备未接收到过目标文件,则会将缓存的目标文件转成为正式存储,若根据第二哈希值确定第二设备已存储目标文件,则删除已缓存的目标文件的一个或多个文件分片。
150.在一些实施例中,所述根据所述第二哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件,包括以下至少之一:
151.在未检索到与所述第二哈希值相同的第四哈希值时,确定保存所述目标文件;
152.在检索到与所述第二哈希值相同的所述第四哈希值时,确定删除已缓存的所述目标文件。
153.在本公开实施例中所述第二设备内存储的哈希值都可以称之为第四哈希值。若未检索到与第二哈希值相同的第四哈希值,可以至少暂时性确定保存目标文件,否则可以删除缓存的目标文件。
154.此处缓存的目标文件为目标文件的临时文件。若确定保存目标文件,就会将临时文件转成存储的正式文件,例如,将目标文件存储到特定路径。
155.如图4所示,本公开实施例提供一种文件处理方法,由第二设备执行,所述方法包括:
156.s2210:接收第一设备上传的第n个文件分片的第一哈希值;其中,所述n为小于或等于n的正整数;所述n为目标文件分成的所述文件分片的总个数;
157.s2220:根据所述第一哈希值确定所述第n个文件分片是否已上传;
158.s2230:在所述第n个文件分片未上传时,接收并缓存所述第一设备上传的第n个所述文件分片;
159.s2240:接收所述第一设备发送的第三哈希值;所述第一线程为所述第一设备内发送所述文件分片并生成所述第一哈希值的线程;
160.s2250:确定所述第二哈希值和所述第三哈希值是否相同;
161.s2260:在所述第二哈希值和所述第三哈希值相同时,根据所述第二哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件。
162.在一个实施例中,如图4所示,所述方法还包括:
163.s2270:在所述第二哈希值和所述第三哈希不同时,根据所述第三哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件。
164.第一设备的第二线程会生成目标文件的第三哈希值,第一设备在生成第三哈希值之后会第一时间内将第三哈希值以各种方式提交给第二设备。如此,第二设备可以在第一时间内核对根据第一哈希值生成的第二哈希值对不对。
165.若将第二哈希值和第四哈希值进行比对,为了确保准确性需要确保生成的第二哈希值和第三哈希值是一致的,若不一致则直接第三哈希值和第四哈希值比对。
166.示例性地,若在生成第二哈希值之后上位接收到第三哈希值,则可以直接进行第二哈希值和第四哈希值比对,在收到第三哈希值之后再将第二哈希值和第三哈希值比对。如此可以第一设备和第二设备之间可以基于第一哈希值和第二哈希值继续完成尚未完成部分的文件分片的传输。若在生成第二哈希值之前,得到第三哈希值,可以将生成的第二哈希值和第三哈希值进行比对,比对两者一致之后将第三哈希值或第二哈希值分别和第四哈希值比对。
167.在一些实施例中,第三哈希值的准确度可高于第二设备根据第一哈希值生成的第二哈希值的准确度。在收到第三哈希值之后,可以直接根据第三哈希值和本地存储第四哈希值比对,若比对第四哈希值包含第三哈希值,则停止目标文件的文件分片的传输,并丢弃已缓存的目标文件的文件分片。
168.当待上传文件过大时,文件哈希(hash)值的计算是一项比较耗时的操作,以常见的浏览器上传为例,对于一个大小为1.11gb的.zip压缩文件,取计算hash值的次数为10次,平均时长为11.694s。若是文件再大一些,计算文件hash将消耗更长的时间,这将影响文件的整体上传效率,降低用户体验。
169.本公开实施例提出了一种前端快速处理的大文件上传方法,其中主要由文件抽样hash值计算、可选的利用web worker进行全量hash计算的补偿机制和文件切片上传三个部分组成,支持断点续传和秒传。
170.基于用户选择,前端确定要上传的大文件;
171.根据在前端界面进行用户输入,确定文件hash计算的抽样比例。示例性地,为了直观的量化,此处抽样比例单位定位rb/1mb(表示每1mb文件中抽取r个字节)。
172.前端对大文件进行抽样hash值计算得到文件的抽样hash值。此处的前端相当于前述的第一设备。
173.本公开实施例的抽样hash算法描述如下(以抽样比例为2b/1mb为例):
174.将文件以5mb大小为1个分片单位进行分片,从0开始递加给分片打上标识(下文称
该文件标识为index)。
175.第一个和最后一个文件分片全取,对剩余文件分片进行抽样截取。
176.取文件的分片标识(index)除以5的余数,若余数为0则将该分片5等分,即每份大小为1mb,截取每份的前2个字节;若余数为1则截取该分片的前10个字节;若余数为2则将该分片分为2份,大小分别为3mb和2mb,截取每份的前5个字节;若余数为3则将该分片分为3份,大小分别为2mb、1mb和2mb,分别截取4个、2个和4个字节;若余数为4则将该分片分为4份,大小分别为1mb、1mb、1mb和2mb,分别截取2个、2个、2个和4个字节。该分片标识可为分片的编号。
177.经过上述步骤得到最终的抽样文件列表,对每份抽样文件进行哈希(hash)值计算,计算完成后进行哈希(hash)值合并得到该文件的hash值。例如,可以利用spark-md5第三方库,该库具备分片计算文件hash值及hash值合并的功能。
178.用此种方式计算文件的哈希(hash)值,取计算hash次数为10次的平均时长为0.372s。相较于对文件整体计算hash的平均时长11.694s,该抽样算法计算hash的效率提升了约31.44倍。
179.后端服务器拿到该hash值后,查询数据库中是否已存在该hash值,若不存在则表明该文件为初次上传,将该hash值存库并通知前端开始进行文件上传。若存在,表明该文件此前已上传过,紧接着查看该文件的上传状态,若为1(表明文件已上传完毕),则直接通知前端该文件已上传完毕(此为秒传);若为0(表明文件尚未上传完毕),则返回给前端已接收到的文件分片标识列表,前端对比后开始上传尚未被接收的文件分片(此为断点续传)。此处的后端服务器可为前述第二设备。
180.参考图5所示,前端上传文件具体步骤如下:
181.抽样计算hash时已经得到了大文件分片列表,假如共有1000个分片文件,给每个文件打上标识(从1-1000),为避免并发请求过多导致内存溢出,控制并发数量为5。即开始时并发5个请求,上传分片标识为1,2,3,4,5的文件分片,每收到一个响应后则继续发送一个请求,按顺序上传标识为6,7

的文件分片,后端接收到文件分片后将这些临时文件分片放入缓存区,并将已接收的文件分片标识存库以供下次断点续传时查询使用。
182.当前端把所有文件分片都上传完毕并确认接收到响应后,发送请求告知后端服务器所有文件分片都已上传,后端服务器开始进行文件合并,并删除临时文件释放缓存,并在数据库中将该文件的上传状态置1(表明文件已上传完毕),文件合并完成之后响应前端请求,告知前端该文件已全部上传完毕。至此,整个大文件上传流程结束。
183.若根据用户操作启用补偿机制:
184.在补偿机制启动后,会开启一个web worker线程来执行全量hash计算的任务。web worker线程为javascript创造了多线程环境,允许主线程创建worker线程,worker独立于主线程在后台单独执行,执行完毕后可以把执行结果返回给主线程。
185.在计算全量hash值(此处的全量hash值可为前述的第三哈希值)的同时,文件上传正常进行。
186.当文件全量hash计算完毕后,把hash值返回给主线程,主线程调用请求后端接口查询后台服务器是否已存在该hash,若已存在且已上传完毕,通知前端停止文件上传并清除临时文件。
187.若已存在但未上传完毕,则返回给前端已接收的文件分片,前端开始执行断点续传的后续步骤。
188.若不存在则表明该文件为初次上传,无需执行额外动作,照常执行文件上传流程。
189.值得注意的是:前述的第二哈希值也是上传文件的全量hash值。
190.本公开实施例主要提出了大文件抽样hash值计算的概念,使用场景为通过浏览器页面上传大文件,其可以迅速计算出文件的hash值,判断文件上传状态,节省大文件的hash值计算过程所带来的时间损耗,提升上传效率。
191.总之,在大文件分片完成后,对每个分片文件做数据抽样,得到抽样文件分片列表,对每个抽样文件分片做hash计算后,再将这些hash值进行合并,最终得到大文件的抽样hash值作为文件的唯一性标识。
192.本公开实施例还提出了一种可选的补偿机制,利用浏览器的web worker为单线程的javascript模拟出多线程执行环境,通过worker子线程在不影响主线程执行的情况下来计算全量hash(即在上传文件的同时在后台计算大文件全量hash值),确保哈希值的准确性和精确性。
193.图5后端服务器返回后端接口,可以理解为后端服务器告诉前端是否要继续上传对应文件分片。该后端接口可理解为查询接口。
194.如图6所示,本公开实施例提供一种文件处理装置,包括:
195.分成模块110,用于将待传输的目标文件分为n个文件分片;其中,所述n为大于或等于2的正整数;
196.第一确定模块120,用于确定各个所述文件分片的第一哈希值;
197.发送模块130,用于根据所述第一哈希值,将所述n个文件分片发送给第二设备;其中,所述n个文件分片的所述第一哈希值,用于组合形成所述目标文件的第二哈希值。
198.在一些实施例中,所述文件处理装置可为第一设备。
199.在一个实施例中,所述分成模块110和所述第一确定模块120可对应于处理器。所述发送模块130可对应于网络接口或者收发天线等。该处理器可为中央处理器、微处理器、数字信号处理器或者嵌入式处理等。
200.在另一个实施例中,所述分成模块110、所述第一确定模块120和所述发送模块130可为程序模块;所述程序模块被处理器执行之后能够实现上述操作。
201.在还有一些实施例中,所述分成模块110、所述第一确定模块120和所述发送模块130可为软硬结合模块;所述软硬结合模块包括但不限于可编程阵列;所述可编程阵列包括但不限于现场可编程阵列和/或复杂可编程阵列。
202.在还有一些实施例中,所述分成模块110、所述第一确定模块120和所述发送模块130可为纯硬件模块;所述纯硬件模块包括但不限于各种专用集成电路。
203.在一个实施例中,所述第一确定模块120,具体用于根据第n个所述文件分片在所述n个所述文件分片中的位置,确定生成第n个所述文件分片的第一哈希值的抽样参数;其中,所述n为小于或等于所述n的正整数;根据所述抽样参数,对第n个所述文件分片进行抽样得到第n个所述文件分片的第一哈希值。
204.在一个实施例中,所述第一确定模块120,具体用于执行以下至少之一:
205.当所述n等于1时,对第1个所述文件分片进行抽样得到第1个所述文件分片的所述
第一哈希值;
206.当所述n等于n时,对第n个所述文件分片进行抽样得到第n个所述文件分片的所述第一哈希值;
207.当所述n小于所述n且大于1时,对所述n进行第一预设值进行取模得到余数,并根据所述余数从第n个所述文件分片的一个或多个子分片进行抽样,得到第n个所述文件分片的所述第一哈希值。
208.在一个实施例中,所述第一确定模块120,具体用于当所述余数为0时,将第n个所述文件分片等分为第二预设值的子分片,采用预设哈希算法对所述子分片进行抽样得到第n个所述文件分片的所述第一哈希值;当所述余数为1时,采用预设哈希算法抽取第n个文件分片的前s个字段作为第n个所述文件分片的所述第一哈希值;所述s为小于所述第二预设值的任意正整数;当所述余数大于或等于2时,采用预设哈希算法将第n个所述文件分片等分为第n个所述文件分片对应余数个子分片,并从每一个所述子分片抽取一个或多个字节得到第n个所述文件分片的所述第一哈希值。
209.在一个实施例中,所述第一确定模块120,具体用于在上传所述文件分片时,利用第一线程确定各个所述文件分片的第一哈希值;
210.所述装置还包括:
211.第一生成模块,用于使用第二线程确定所述目标文件的第三哈希值,其中,所述第三哈希值,用于校正所述第二哈希值;其中,所述第二线程不同于所述第一线程;
212.所述发送模块130,还用于将所述第三哈希值发送给所述第二设备。
213.如图7所示,本公开实施例提供一种文件处理装置,所述装置包括:
214.接收模块210,用于接收第一设备上传的第n个文件分片的第一哈希值;其中,所述n为小于或等于n的正整数;所述n为目标文件分成的所述文件分片的总个数;
215.第二确定模块220,用于根据所述第一哈希值确定所述第n个文件分片是否已上传;
216.接收缓存模块230,用于在所述第n个文件分片未上传时,接收并缓存所述第一设备上传的第n个所述文件分片。
217.在一些实施例中,所述文件处理装置可为第二设备。
218.在一个实施例中,所述接收模块210可为网络接口或者收发天线。第二确定模块220和接收缓存模块230可为处理器等。
219.在一个实施例中,所述接收模块210、第二确定模块220和所述接收缓存模块230可对应于处理器。所述发送模块可对应于网络接口或者收发天线等。该处理器可为中央处理器、微处理器、数字信号处理器或者嵌入式处理等。
220.在另一个实施例中,所述接收模块210、第二确定模块220和所述接收缓存模块230可为程序模块;所述程序模块被处理器执行之后能够实现上述操作。
221.在还有一些实施例中,所述接收模块210、第二确定模块220和所述接收缓存模块230可为软硬结合模块;所述软硬结合模块包括但不限于可编程阵列;所述可编程阵列包括但不限于现场可编程阵列和/或复杂可编程阵列。
222.在还有一些实施例中,所述接收模块210、第二确定模块220和所述接收缓存模块230可为纯硬件模块;所述纯硬件模块包括但不限于各种专用集成电路。
223.在一些实施例中,所述装置还包括:
224.第二生成模块,用于在完成n个所述第一哈希值之后,根据第1至第n个所述文件分片的第一哈希值确定所述目标文件的第二哈希值;
225.第三确定模块,用于根据所述第二哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件。
226.在一些实施例中,所述第三确定模块,具体用于执行以下至少之一:在未检索到与所述第二哈希值相同的第四哈希值时,确定保存所述目标文件;在检索到与所述第二哈希值相同的所述第四哈希值时,确定删除已缓存的所述目标文件。
227.在一些实施例中,所述接收模块210,还用于接收所述第一设备发送的第三哈希值;
228.所述装置还包括:
229.第四确定模块,用于确定所述第二哈希值和所述第三哈希值是否相同;
230.所述第三确定模块,具体用于在所述第二哈希值和所述第三哈希值相同时,根据所述第二哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件。
231.如图8所示,本公开实施例提供一种电子设备,所述电子设备包括:
232.存储器;
233.处理器,与所述存储器连接,用于通过执行存储在所述存储器上的计算机可执行指令,能够实现前述任意实施例提供的文件处理方法,例如执行如图1至图5任意所示的文件处理方法。
234.该电子设备可为前述第一设备和/或第二设备
235.如图8所示,该电子设还可包括网络接口,该网络接口可用于通过第一设备和第二设备之间的信息交互。
236.本公开实施例提供一种计算机存储介质,所述计算机存储介质存储有计算机可执行指令;所述计算机可执行指令被处理器执行后,能够实现前述任意实施例提供的文件处理方法,例如执行如图1至图5任意所示的文件处理方法。该计算机存储介质为非瞬间存储介质。
237.本公开实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
238.在本公开所提供的几个实施例中,应该理解到,所揭露的方法和智能设备,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
239.上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
240.另外,在本公开各实施例中的各功能单元可以全部集成在一个第二处理单元中,也可以是各单元分别单独作为一个单元,也可以n个或n个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
241.以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。

技术特征:
1.一种文件处理方法,其特征在于,由第一设备执行,包括:将待传输的目标文件分为n个文件分片;其中,所述n为大于或等于2的正整数;确定各个所述文件分片的第一哈希值;根据所述第一哈希值,将所述n个文件分片发送给第二设备;其中,所述n个文件分片的所述第一哈希值,用于组合形成所述目标文件的第二哈希值。2.根据权利要求1所述的方法,其特征在于,所述确定各个所述文件分片的第一哈希值确定各个所述文件分片的第一哈希值,包括:根据第n个所述文件分片在所述n个所述文件分片中的位置,确定生成第n个所述文件分片的第一哈希值的抽样参数;其中,所述n为小于或等于所述n的正整数;根据所述抽样参数,对第n个所述文件分片进行抽样得到第n个所述文件分片的第一哈希值。3.根据权利要求1或2所述的方法,其特征在于,所述根据所述抽样参数,对第n个所述文件分片进行抽样得到第n个所述文件分片的第一哈希值,包括以下至少之一:当所述n等于1时,对第1个所述文件分片进行抽样得到第1个所述文件分片的所述第一哈希值;当所述n等于n时,对第n个所述文件分片进行抽样得到第n个所述文件分片的所述第一哈希值;当所述n小于所述n且大于1时,对所述n进行第一预设值进行取模得到余数,并根据所述余数从第n个所述文件分片的一个或多个子分片进行抽样,得到第n个所述文件分片的所述第一哈希值。4.根据权利要求3所述的方法,其特征在于,所述当所述n小于所述n且大于1时,对所述n进行第一预设值进行取模得到余数,并根据所述余数从第n个所述文件分片的一个或多个子分片进行抽样,得到第n个所述文件分片的所述第一哈希值,包括:当所述余数为0时,将第n个所述文件分片等分为第二预设值的子分片,采用预设哈希算法对所述子分片进行抽样得到第n个所述文件分片的所述第一哈希值;当所述余数为1时,采用预设哈希算法抽取第n个文件分片的前s个字段作为第n个所述文件分片的所述第一哈希值;所述s为小于所述第二预设值的任意正整数;当所述余数大于或等于2时,采用预设哈希算法将第n个所述文件分片等分为第n个所述文件分片对应余数个子分片,并从每一个所述子分片抽取一个或多个字节得到第n个所述文件分片的所述第一哈希值。5.根据权利要求1至4任一项所述的方法,其特征在于,所述确定各个所述文件分片的第一哈希值,包括:在上传所述文件分片时,利用第一线程确定各个所述文件分片的第一哈希值;所述方法还包括:使用第二线程确定所述目标文件的第三哈希值,其中,所述第三哈希值,用于校正所述第二哈希值;其中,所述第二线程不同于所述第一线程;将所述第三哈希值发送给所述第二设备。6.一种文件处理方法,其特征在于,由第二设备执行,所述方法包括:接收第一设备上传的第n个文件分片的第一哈希值;其中,所述n为小于或等于n的正整数;所述n为目标文件分成的所述文件分片的总个数;
根据所述第一哈希值确定所述第n个文件分片是否已上传;在所述第n个文件分片未上传时,接收并缓存所述第一设备上传的第n个所述文件分片。7.根据权利要求6所述的方法,其特征在于,所述方法还包括:在完成n个所述第一哈希值之后,根据第1至第n个所述文件分片的第一哈希值确定所述目标文件的第二哈希值;根据所述第二哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件。8.根据权利要求7所述的方法,其特征在于,所述根据所述第二哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件,包括以下至少之一:在未检索到与所述第二哈希值相同的第四哈希值时,确定保存所述目标文件;在检索到与所述第二哈希值相同的所述第四哈希值时,确定删除已缓存的所述目标文件。9.根据权利要求7或8所述的方法,其特征在于,所述方法还包括:接收所述第一设备发送的第三哈希值;其中所述第一哈希值是有第二设备内独立于第一线程的第二线程生成的;所述第一线程为所述第一设备内发送所述文件分片并生成所述第一哈希值的线程;确定所述第二哈希值和所述第三哈希值是否相同;所述根据所述第二哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件,包括:在所述第二哈希值和所述第三哈希值相同时,根据所述第二哈希值,确定删除已缓存的所述目标文件或者保存已缓存的所述目标文件。10.一种文件处理装置,其特征在于,包括:分成模块,用于将待传输的目标文件分为n个文件分片;其中,所述n为大于或等于2的正整数;第一确定模块,用于确定各个所述文件分片的第一哈希值;发送模块,用于根据所述第一哈希值,将所述n个文件分片发送给第二设备;其中,所述n个文件分片的所述第一哈希值,用于组合形成所述目标文件的第二哈希值。11.一种文件处理装置,其特征在于,所述装置包括:接收模块,用于接收第一设备上传的第n个文件分片的第一哈希值;其中,所述n为小于或等于n的正整数;所述n为目标文件分成的所述文件分片的总个数;第二确定模块,用于根据所述第一哈希值确定所述第n个文件分片是否已上传;接收缓存模块,用于在所述第n个文件分片未上传时,接收并缓存所述第一设备上传的第n个所述文件分片。12.一种电子设备,其特征在于,所述电子设备包括:存储器;处理器,与所述存储器连接,用于通过执行存储在所述存储器上的计算机可执行指令,能够实现权利要求1至5或6至9任一项提供的文件处理方法。13.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机可执行指
令;所述计算机可执行指令被处理器执行后,能够实现权利要求1至5或6至9任一项提供的文件处理方法。

技术总结
本公开公开了一种文件处理方法及装置、电子设备及存储介质。由应用节点执行的文件处理方法可包括:将待传输的目标文件分为N个文件分片;其中,所述N为大于或等于2的正整数;确定各个所述文件分片的第一哈希值;根据所述第一哈希值,将所述N个文件分片发送给第二设备;其中,所述N个文件分片的所述第一哈希值,用于组合形成所述目标文件的第二哈希值。合形成所述目标文件的第二哈希值。合形成所述目标文件的第二哈希值。


技术研发人员:刘瑞
受保护的技术使用者:中国移动通信集团有限公司
技术研发日:2022.10.20
技术公布日:2023/9/22
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐