掌桥专利:专业的专利平台
掌桥专利
首页

大文件分片串并行上传方法及系统

文献发布时间:2023-06-19 18:34:06


大文件分片串并行上传方法及系统

技术领域

本发明涉及文件上传技术领域,特别涉及一种大文件分片串并行上传方法及系统。

背景技术

当直接上传超过1GB的文件时会受到目标服务器的诸多限制,同时也存在服务器内存溢出的风险;因此,现在普遍流行的解决方案是将文件切割成几兆大小的文件切片,将这些切片顺序串行上传至服务器,再在服务器结合成原始文件。这种方案虽然解除了对文件大小的限制,但在内网环境或上行速率高的公网环境下,对带宽的利用率明显不足。

另一种既存的解决方案是将文件分割成数个大份,然后同时把所有分割后的文件并发上传至服务器。这样做可以提高对上行带宽的利用率,但如果分割的份数较少,每份切片的大小仍然很大,依旧没有解决单个请求上传量过大的问题。

发明内容

本发明的提供一种大文件分片串并行上传方法及系统,既保证多个小文件切片上传处理之间并发执行,又能保证这些处理各自完成后的重发、补充下一切片是串行的。

第一方面,提供一种大文件分片串并行上传方法,包括以下步骤:

控制客户端将待上传大文件切割成多个小文件切片,并将多个所述小文件切片按顺序放入文件切片队列中;

开启多个Promise处理链,每个Promise处理链同时各发送一个异步AJAX请求,每个异步AJAX请求从文件切片队列中各获取一个小文件切片,并同时并行上传获取的小文件切片至服务器、以完成一轮并行上传,重复每一轮并行上传、直至文件切片队列中的所有小文件切片上传完成;

当一轮并行上传成功后,新一轮的每个异步AJAX请求从文件切片队列中串行获取下一个小文件切片;当一轮并行上传失败后,则重新串行上传已上传失败的小文件切片;

当检测到文件切片队列中的所有小文件切片上传完成后,控制服务器对所有小文件进行切片合并,获取合并大文件。

根据第一方面,在第一方面的第一种可能的实现方式中,所述“控制客户端将待上传大文件切割成多个小文件切片,并将多个所述小文件切片按顺序放入文件切片队列中”步骤之后,具体包括以下步骤:

控制客户端对所述待上传大文件基于MD5算法生成第一哈希值数字签名,并发送至服务器;

控制服务器检测所述第一哈希值数字签名在服务器中是否有对应的曾已上传文件;

当检测到没有对应的曾已上传文件,则对所述待上传大文件标记所述第一哈希值数字签名;

当检测到有对应的部分曾已上传文件,则在文件切片队列中删除部分曾已上传文件对应的小文件切片;

当检测到有对应的全部曾已上传文件,则终止上传。

根据第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述“当检测到文件切片队列中的所有小文件切片上传完成后,控制服务器对所有小文件进行切片合并,获取合并大文件”步骤之后,具体包括以下步骤:

控制服务器对所述合并大文件基于MD5算法生成第二哈希值数字签名;

对比所述第一哈希值数字签名和所述第二哈希值数字签名是否一致;

当哈希值数字签名不一致,则删除服务器中的所述合并大文件,并重新上传所述待上传大文件。

根据第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述“控制客户端将待上传大文件切割成多个小文件切片,并将多个所述小文件切片按顺序放入文件切片队列中”步骤之前,具体包括以下步骤:

当客户端检测到待上传大文件,则生成UUID识别码。

根据第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述“开启多个Promise处理链,每个Promise处理链同时各发送一个异步AJAX请求”步骤之后,具体包括以下步骤:

对每个所述异步AJAX请求标记所述UUID识别码。

根据第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,多个Promise处理链设为少于6个Promise处理链。

根据第一方面的第五种可能的实现方式,在第一方面的第六种可能的实现方式中,所述“开启多个Promise处理链,每个Promise处理链同时各发送一个异步AJAX请求,每个异步AJAX请求从文件切片队列中各获取一个小文件切片,并同时并行上传获取的小文件切片至服务器”步骤之后,具体包括以下步骤:

当检测到一个小文件切片上传成功后,则根据如下公式,更新切片上传进度率;

进度率=已小文件切片的数量÷小文件切片的总数×100%

第二方面,提供一种大文件分片串并行上传系统,包括:

文件切割模块,用于控制客户端将待上传大文件切割成多个小文件切片,并将多个所述小文件切片按顺序放入文件切片队列中;

串并行上传模块,与所述文件切割模块通信连接,用于开启多个Promise处理链,每个Promise处理链同时各发送一个异步AJAX请求,每个异步AJAX请求从文件切片队列中各获取一个小文件切片,并同时并行上传获取的小文件切片至服务器、以完成一轮并行上传,重复每一轮并行上传、直至文件切片队列中的所有小文件切片上传完成;当一轮并行上传成功后,新一轮的每个异步AJAX请求从文件切片队列中串行获取下一个小文件切片;当一轮并行上传失败后,则重新串行上传已上传失败的小文件切片;

合并模块,与所述文件切割模块及所述串并行上传模块通信连接,用于当检测到文件切片队列中的所有小文件切片上传完成后,控制服务器对所有小文件进行切片合并,获取合并大文件。

根据第二方面,在第二方面的第一种可能的实现方式中,包括:数字签名模块,与所述文件切割模块通信连接,用于控制客户端对所述待上传大文件基于MD5算法生成第一哈希值数字签名,并发送至服务器;控制服务器检测所述第一哈希值数字签名在服务器中是否有对应的曾已上传文件;当检测到没有对应的曾已上传文件,则对所述待上传大文件标记所述第一哈希值数字签名;当检测到有对应的部分曾已上传文件,则在文件切片队列中删除部分曾已上传文件对应的小文件切片;当检测到有对应的全部曾已上传文件,则终止上传。

根据第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,包括:签名对比模块,与所述合并模块及所述数字签名模块通信连接,用于控制服务器对所述合并大文件基于MD5算法生成第二哈希值数字签名;对比所述第一哈希值数字签名和所述第二哈希值数字签名是否一致;当哈希值数字签名不一致,则删除服务器中的所述合并大文件,并重新上传所述待上传大文件。

与现有技术相比,本发明的优点如下:本发明采用文件切片的方式,将待上传大文件切割成多个小文件切片,但在小文件切片上传时,使用串行和并行结合的方式,保证多个小文件切片同时并行上传,当一个小文件切片被成功上传后,立即串行补充获取下一个小文件切片并上传;若小文件切片上传失败,则仅对这一个切片进行串行重传。当所有小文件切片全部成功上传后,在服务器上对所有小文件进行切片合并,获取合并大文件。因此本发明既保证多个小文件切片上传处理之间并发执行,又能保证这些处理各自完成后的重发、补充下一切片是串行的。

附图说明

图1是本发明一种大文件分片串并行上传方法的一实施例的流程示意图;

图2是本发明一种大文件分片串并行上传方法的又一实施例的流程示意图;

图3是本发明一种大文件分片串并行上传系统的结构示意图。

附图说明:

100、大文件分片串并行上传系统;110、文件切割模块;120、串并行上传模块;130、合并模块;140、数字签名模块;150、签名对比模块。

具体实施方式

现在将详细参照本发明的具体实施例,在附图中例示了本发明的例子。尽管将结合具体实施例描述本发明,但将理解,不是想要将本发明限于所述的实施例。相反,想要覆盖由所附权利要求限定的在本发明的精神和范围内包括的变更、修改和等价物。应注意,这里描述的方法步骤都可以由任何功能块或功能布置来实现,且任何功能块或功能布置可被实现为物理实体或逻辑实体、或者两者的组合。

为了使本领域技术人员更好地理解本发明,下面结合附图和具体实施方式对本发明作进一步详细说明。

注意:接下来要介绍的示例仅是一个具体的例子,而不作为限制本发明的实施例必须为如下具体的步骤、数值、条件、数据、顺序等等。本领域技术人员可以通过阅读本说明书来运用本发明的构思来构造本说明书中未提到的更多实施例。

参见图1所示,本发明实施例提供一种大文件分片串并行上传方法,包括以下步骤:

S100,控制客户端将待上传大文件切割成多个小文件切片,并将多个所述小文件切片按顺序放入文件切片队列中;

S200,开启多个Promise处理链,每个Promise处理链同时各发送一个异步AJAX请求,每个异步AJAX请求从文件切片队列中各获取一个小文件切片,并同时并行上传获取的小文件切片至服务器、以完成一轮并行上传,重复每一轮并行上传、直至文件切片队列中的所有小文件切片上传完成;

当一轮并行上传成功后,新一轮的每个异步AJAX请求从文件切片队列中串行获取下一个小文件切片;当一轮并行上传失败后,则重新串行上传已上传失败的小文件切片;

S300,当检测到文件切片队列中的所有小文件切片上传完成后,控制服务器对所有小文件进行切片合并,获取合并大文件。

具体地,本实施例中,由于现有技术中,将大文件切割成几兆大小的文件切片,将这些切片顺序串行上传至服务器,该方案虽然解除了对文件大小的限制,但在内网环境或上行速率高的公网环境下,对带宽的利用率明显不足;同时将文件分割成数个大份,然后同时把所有分割后的文件并发上传至服务器,该方案分割的份数较少,每份切片的大小仍然很大,依旧没有解决单个请求上传量过大的问题。

需要说明的是,串行传输方式为数据排成一行、一位一位发送出去,接收也一样;并行传输方式为多个数据一次发送出去。

因此针对上述情况,本发明采用文件切片的方式,将待上传大文件切割成多个小文件切片(5MB为单位进行切割),但在小文件切片上传时,使用串行和并行结合的方式,保证多个小文件切片同时并行上传,当一个小文件切片被成功上传后,立即串行补充获取下一个小文件切片并上传;若小文件切片上传失败,则仅对这一个切片进行串行重传。当所有小文件切片全部成功上传后,在服务器上对所有小文件进行切片合并,获取合并大文件。

因此本发明既要保证多个小文件切片上传处理之间并发执行,又需要保证这些处理各自完成后的重发、补充下一切片是串行的,因此,依赖ES6的Promise处理链的机制对这些处理进行同步控制。

本发明:

1、将文件分割为足够小的切片,保有了现有技术的优势。包括:解除了对文件大小的限制、缓解服务器的瞬时内存压力、易于监测上传进度、网络波动下可仅对少量部分进行重传等。

2、同时并发上传文件切片,显著提升带宽利用率,提高上传速度,串并行上传方式也不同于现有的单独串行或单独并行,能结合两者的优势,解决上述现有技术问题。

优选地,在本申请另外的实施例中,所述“S100,控制客户端将待上传大文件切割成多个小文件切片,并将多个所述小文件切片按顺序放入文件切片队列中”步骤之后,具体包括以下步骤:

S400,控制客户端对所述待上传大文件基于MD5算法生成第一哈希值数字签名,并发送至服务器;

S500,控制服务器检测所述第一哈希值数字签名在服务器中是否有对应的曾已上传文件;

当检测到没有对应的曾已上传文件,则对所述待上传大文件标记所述第一哈希值数字签名;方便下次上传相同文件时进行文件复用;

当检测到有对应的部分曾已上传文件,则在文件切片队列中删除部分曾已上传文件对应的小文件切片;

当检测到有对应的全部曾已上传文件,则终止上传。

具体地,本实施例中,MD5算法是单向散列算法的一种,单向散列算法也称为HASH算法,是一种将任意长度的信息压缩至某一固定长度(称之为消息摘要)的函数(该压缩过程不可逆);用于确保信息传输完整一致。

在小文件切片上传处理进行的同时,客户端对所述待上传大文件基于MD5算法生成第一哈希值数字签名并发送至服务端,检测所述第一哈希值数字签名在服务器中是否有对应的曾已上传文件。如果以前已上传过、或上传到一半中止,则复用已上传的部分,可进一步节省文件上传的总时间。

优选地,在本申请另外的实施例中,所述“S300,当检测到文件切片队列中的所有小文件切片上传完成后,控制服务器对所有小文件进行切片合并,获取合并大文件”步骤之后,具体包括以下步骤:

S600,控制服务器对所述合并大文件基于MD5算法生成第二哈希值数字签名;

S700,对比所述第一哈希值数字签名和所述第二哈希值数字签名是否一致;

当哈希值数字签名不一致,则删除服务器中的所述合并大文件,并重新上传所述待上传大文件。

具体地,本实施例中,通过比较在客户端生成的数字签名和步骤在服务端生成的数字签名,进行文件完整性校验。若签名一致,上传处理结束;若签名不一致,则说明在切割/传输/结合过程中发生了错误,此时应删除服务器上该文件的全部切片,并重新上传所述待上传大文件。

优选地,在本申请另外的实施例中,所述“控制客户端将待上传大文件切割成多个小文件切片,并将多个所述小文件切片按顺序放入文件切片队列中”步骤之前,具体包括以下步骤:

当客户端检测到待上传大文件,则生成UUID识别码。

优选地,在本申请另外的实施例中,所述“开启多个Promise处理链,每个Promise处理链同时各发送一个异步AJAX请求”步骤之后,具体包括以下步骤:

对每个所述异步AJAX请求标记所述UUID识别码。

具体地,本实施例中,UUID是通用唯一识别码(Universally Unique Identifier)的缩写,它使用某种规则,而不是某种中心化的自增方式,来保证这个识别码的全局唯一性。

在客户端生成随机的UUID识别码,在本次上传处理的全部请求中都带上该识别码,用来标识这些请求全是用于将待上传大文件的上传处理。

优选地,在本申请另外的实施例中,多个Promise处理链设为少于6个Promise处理链;

具体地,本实施例中,由于在对大文件切片时分割的份数太多,由于浏览器对同一页面同一时间点发起的请求数有上限限制(例如Chrome浏览器至多只允许6个请求处于通信状态,其余请求将会被挂起),当6个请求全部被文件上传请求占用时,用于画面交互的其他请求将被阻塞,用户行为得不到及时反馈。因此开启少于6个Promise处理链,每个Promise处理链同时各发送一个异步AJAX请求,可预留出至少一个请求处理其它需求和用户反馈。

优选地,在本申请另外的实施例中,所述“开启多个Promise处理链,每个Promise处理链同时各发送一个异步AJAX请求,每个异步AJAX请求从文件切片队列中各获取一个小文件切片,并同时并行上传获取的小文件切片至服务器”步骤之后,具体包括以下步骤:

当检测到一个小文件切片上传成功后,则根据如下公式,更新切片上传进度率;

进度率=已小文件切片的数量÷小文件切片的总数×100%。

同时参见图2所示,本发明实施例提供的一种大文件分片串并行上传方法,具体包括以下步骤:

1、在客户端生成随机的UUID识别码,在本次上传处理的全部请求中都带上该识别码;

2、客户端将待上传大文件切割成多个小文件切片,并将多个所述小文件切片按顺序放入文件切片队列中;

3、开启5个Promise处理链,每个Promise处理链同时各发送一个异步AJAX请求(图中同时发起5个请求),每个异步AJAX请求从文件切片队列中各获取一个小文件切片,并同时并行上传获取的小文件切片至服务器、以完成一轮并行上传,重复每一轮并行上传、直至文件切片队列中的所有小文件切片上传完成;

当一轮并行上传成功后,新一轮的每个异步AJAX请求从文件切片队列中串行获取下一个小文件切片;当一轮并行上传失败后,则重新串行上传已上传失败的小文件切片;当检测到一个小文件切片上传成功后,则更新切片上传进度率。

4、同时,在小文件切片等待上传的过程中,客户端异步计算出要上传文件的数字签名;一般地,使用MD5算法可以为文件内容生成唯一的哈希值作为数字签名;并发送至服务端。

5、控制服务器检测所述第一哈希值数字签名在服务器中是否有对应的曾已上传文件;当检测到没有对应的曾已上传文件,则对所述待上传大文件标记所述第一哈希值数字签名;方便下次上传相同文件时进行文件复用;当检测到有对应的部分曾已上传文件,则在文件切片队列中删除部分曾已上传文件对应的小文件切片;当检测到有对应的全部曾已上传文件,则终止上传。

6、当检测到文件切片队列中的所有小文件切片上传完成后,控制服务器对所有小文件进行切片合并,获取合并大文件。

7、服务器对所述合并大文件基于MD5算法生成第二哈希值数字签名;对比所述第一哈希值数字签名和所述第二哈希值数字签名是否一致;当签名一致,上传处理结束;当哈希值数字签名不一致,则删除服务器中的所述合并大文件,并重新上传所述待上传大文件。

同时参见图3所示,本发明实施例还提供了一种大文件分片串并行上传系统100,包括:文件切割模块110、串并行上传模块120、合并模块130、数字签名模块140、签名对比模块150;

文件切割模块110,用于控制客户端将待上传大文件切割成多个小文件切片,并将多个所述小文件切片按顺序放入文件切片队列中;

串并行上传模块120,与所述文件切割模块110通信连接,用于开启少于6个Promise处理链,每个Promise处理链同时各发送一个异步AJAX请求,每个异步AJAX请求从文件切片队列中各获取一个小文件切片,并同时并行上传获取的小文件切片至服务器、以完成一轮并行上传,重复每一轮并行上传、直至文件切片队列中的所有小文件切片上传完成;当一轮并行上传成功后,新一轮的每个异步AJAX请求从文件切片队列中串行获取下一个小文件切片;当一轮并行上传失败后,则重新串行上传已上传失败的小文件切片;

合并模块130,与所述文件切割模块110及所述串并行上传模块120通信连接,用于当检测到文件切片队列中的所有小文件切片上传完成后,控制服务器对所有小文件进行切片合并,获取合并大文件。

数字签名模块140,与所述文件切割模块110通信连接,用于控制客户端对所述待上传大文件基于MD5算法生成第一哈希值数字签名,并发送至服务器;控制服务器检测所述第一哈希值数字签名在服务器中是否有对应的曾已上传文件;当检测到没有对应的曾已上传文件,则对所述待上传大文件标记所述第一哈希值数字签名;当检测到有对应的部分曾已上传文件,则在文件切片队列中删除部分曾已上传文件对应的小文件切片;当检测到有对应的全部曾已上传文件,则终止上传。

签名对比模块150,与所述合并模块130及所述数字签名模块140通信连接,用于控制服务器对所述合并大文件基于MD5算法生成第二哈希值数字签名;对比所述第一哈希值数字签名和所述第二哈希值数字签名是否一致;当哈希值数字签名不一致,则删除服务器中的所述合并大文件,并重新上传所述待上传大文件。

因此本发明将文件分割为足够小的切片,保有了现有技术的优势。同时并发上传文件切片,显著提升带宽利用率,提高上传速度,串并行上传方式也不同于现有的单独串行或单独并行,能结合两者的优势。此外开启少于6个Promise处理链,每个Promise处理链同时各发送一个异步AJAX请求,可预留出至少一个请求处理其它需求和用户反馈。

具体的,本实施例与上述方法实施例一一对应,各个模块的功能在相应的方法实施例中已经进行详细说明,因此不再一一赘述。

基于同一发明构思,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述方法的所有方法步骤或部分方法步骤。

本发明实现上述方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

基于同一发明构思,本申请实施例还提供一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,处理器执行计算机程序时实现上述方法中的所有方法步骤或部分方法步骤。

所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,处理器是计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。

存储器可用于存储计算机程序和/或模块,处理器通过运行或执行存储在存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现计算机装置的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(例如声音播放功能、图像播放功能等);存储数据区可存储根据手机的使用所创建的数据(例如音频数据、视频数据等)。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、服务器或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、服务器和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

相关技术
  • 一种大文件分片上传方法和系统
  • 一种大文件分片上传方法、装置及其介质
技术分类

06120115610735