CN116032913A - 基于分布式对象存储的文件上传方法及系统 - Google Patents
基于分布式对象存储的文件上传方法及系统 Download PDFInfo
- Publication number
- CN116032913A CN116032913A CN202211244478.XA CN202211244478A CN116032913A CN 116032913 A CN116032913 A CN 116032913A CN 202211244478 A CN202211244478 A CN 202211244478A CN 116032913 A CN116032913 A CN 116032913A
- Authority
- CN
- China
- Prior art keywords
- file
- fragment
- uploaded
- uploading
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 39
- 239000012634 fragment Substances 0.000 claims abstract description 472
- 230000005540 biological transmission Effects 0.000 claims abstract description 37
- 230000002045 lasting effect Effects 0.000 claims description 16
- 230000002085 persistent effect Effects 0.000 claims description 14
- 230000011218 segmentation Effects 0.000 claims description 13
- 238000007781 pre-processing Methods 0.000 description 2
- 238000012550 audit Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了基于分布式对象存储的文件上传方法及系统,属于对象存储技术领域,要解决的技术问题为如何提高文件上传效率并减少容错率。包括如下步骤:对于待上传的文件,基于所述文件的MD5值判断所述文件是否存在于分布式存储对象中;如果所述待上传文件不存在于对象存储系统中,对所述待上传文件进行分片上传;基于分片的MD5值验证客户端与业务服务端之间的分片上传以及业务服务端与对象存储系统之间的分片上传,如果分片上传失败,重新上传所述分片;基于文件的MD5值验证客户端、业务服务端和对象存储系统之间的文件上传,如果文件上传失败,重新对待上传文件进行分片上传;当分片上传过程中产生中断时,进行断点续传。
Description
技术领域
本发明涉及对象存储技术领域,具体地说是基于分布式对象存储的文件上传方法及系统。
背景技术
目前,越来越多的业务场景需要上传大文件,需要使用分布式对象存储系统,同时大文件的上传大部分又与业务相关联,需要经由业务服务端进行相应业务处理,直接将大文件由客户端直接上传至分布式对象存储系统中将无法适用,因此需要将客户端、业务服务端、分布式对象存储系统串联起来。传统处理流程为,将完整文件连同对应业务参数直接上传至业务服务端,再由服务端进行相应业务处理后,将文件上传至对象存储系统,这样将会对业务服务端造成不小的内存压力,同时,上传大文件需要占用大量客户网络带宽、保持链接时间,一旦过程中出错,如网络断开、业务登出、客户计算机关机等,整个上传过程就会失败,只能重新执行上传操作,极大降低用户使用体验及业务执行效率。因此,如何在不影响业务执行流程的情况下,提高大文件上传效率、容错率显得尤为重要。
如何提高文件上传效率并减少容错率,是需要解决的技术问题。
发明内容
本发明的技术任务是针对以上不足,提供基于分布式对象存储的文件上传方法及系统,来解决如何提高文件上传效率并减少容错率的技术问题。
第一方面,本发明一种基于分布式对象存储的文件上传方法,通过分片上传的方式实现所述文件在客户端、业务服务端和对象存储系统之间的上传,所述方法包括如下步骤:
对于待上传的文件,基于所述文件的MD5值判断所述文件是否存在于分布式存储对象中;
如果所述待上传文件不存在于对象存储系统中,对所述待上传文件进行分片上传,对于每个分片,基于分片的MD值验证客户端与业务服务端之间的分片上传以及业务服务端与对象存储系统之间的分片上传,如果分片上传失败,重新上传所述分片;
所述待上传文件的所有分片均上传至对象存储系统后,基于所述待上传文件的MD值验证客户端、业务服务端和对象存储系统之间的文件上传,如果文件上传失败,重新对所述待上传文件进行分片上传。
作为优选,对于待上传的文件,基于所述文件的MD5值判断所述文件是否存在于分布式存储对象中,包括如下步骤:
通过客户端将所述待上传文件切分为多个分片,计算每个分片的MD5值,并将所有分片的MD5值结合作为待上传文件的MD值;
通过客户端将待上传文件的MD5值以及业务参数发送至业务服务端,以初始化分片上传任务;
业务服务端接收到待上传文件的MD5值以及业务参数后,基于待上传文件的MD5值查询所述待上传文件是否已存在于对象存储系统中;
如果所述待上传文件已存在于对象存储系统中,将所述待上传文件标记为已上传;
如果所述待上传文件未存在于对象存储系统中,通过业务服务端将所述待上传文件的MD5值以及业务参数持久化存储。
作为优选,如果所述待上传文件不存在于对象存储系统中,对所述待上传文件进行分配上传之前,执行如下操作:
通过业务服务端向对象存储系统发送指令初始化分片上传任务,并获取分片上传任务id,所述分片上传任务id用于作为待上传文件分片上传的唯一标识;
根据文件切分规则、通过业务服务端计算分片大小形成分片信息,所述分片信息包括单个分片的分片大小、最后一个分片的分片大小、以及分片数量;
通过业务服务端将所述分片上传任务id以及所述分片信息持久化存储。
作为优选,通过逐次切分并上传分片的形式待对所述待上传文件进行分片上传,对于每个分片,所述分片的切分上传包括如下操作:
L1、基于分片信息,通过业务服务端计算所述分片在待上传文件上的切割位置,并将分片上传任务id以及得到的切割位置发送至客户端;
L2、客户端接收到分片上传任务id以及切割位置后,基于切割位置对待上传文件进行切分、得到当前分片并为当前分片编号,计算当前分片的MD5值,并将当前切片及其编号、当前分片的MD5值以及分片上传任务id上传至业务服务端;
L3、业务服务端接收到当前切片及其编号、当前分片的MD5值以及分片上传任务id后,基于分片上传任务id进行校验,查询对象存储系统中是否已上传当前分片,如果是,不再对当前分片执行分片上传,如果否,执行下一步;
L4、根据分片上传任务id以及分片信息,查询当前分片是否为最后一个分片并计算当前分片应有的大小,将当前分片应有的大小与接收的当前分片的大小进行比对,如果大小值不一致,向客户端返回错误提示,要求客户端对当前分片重新上传,如果大小一致,执行下一步;
L5、业务服务端计算当前分片的MD5值,将计算得到的当前分片的MD5值与接收的当前分片的MD5值进行比对,如果不一致,向客户端返回错误提示,要求客户端对当前分片重新上传,如果一致,执行下一步;
L6、业务服务端将当前分片及其编号上传至对象存储系统,将当前分片的MD5值与从对象存储系统返回的当前分片的eTag值进行比对,如果不一致,业务服务端对当前分片重新上传,如果一致,执行下一步;
其中,对象存储系统接收业务服务端上传的当前分片后,计算当前分片的MD5作为当前分片的eTag值,并将当前分片的eTag值返回业务服务端;
L7、业务服务系统根据分片信息判定当前分片是否为最后一个分片,如果不是,执行步骤L8,如果是,执行如下操作:
基于分片上传任务id从业务服务端查询所有分片的eTag值,将所有分片的eTag值结合作为待上传文件的eTag值;
将计算得到的待上传文件的eTag值与查询到的待上传文件的eTag进行比对,如果一致,所述待上传文件上传成功,如果不一致,重新对所述待上传文件进行分片上传;
L8、将当前分片的MD5值持久化,并通过执行步骤L1-L7计算下一个分片的切割位置并上传下一个分片;
客户端以及业务服务端对当前分片重新上传时,基于当前分片的编号、将对应分片上传操作形成的历史数据覆盖;
对待上传文件重新上传时,基于分片上传任务id、将对应分片上传操作形成的历史数据覆盖。
作为优选,当分片上传过程中产生中断时,对当前分片进行断点续传;
所述断点续传包括如下步骤:
M1、对于待上传的文件,客户端向业务服务端发送断点续传请求,所述断点续传请求中包括文件的MD5值以及分片上传任务id;
M2、业务服务端接收断点续传请求后,基于分片上传任务id查询持久化存储的原文件的MD5值,并与客户端发送的文件的MD5值进行比对,如果不一致,向客户端返回错误提示,要求客户端重新选择文件上传,如果一致,执行M3;
M3、根据分片上传任务id查询对象存储系统中已上传分片的数量,基于已上传分片的数量以及持久化存储的分片信息,对下一个分片执行切分上传操作,直至所有分片切分上传完成。
第二方面,本发明一种基于分布式对象存储的文件上传系统,包括客户端、业务服务端和对象存储系统,所述客户端、业务服务端和对象存储系统配合,用于通过如第一方面任一项所述的方法实现文件在客户端、业务服务端和对象存储系统之间的上传;
对于待上传的文件,所述客户端、业务服务端和对象存储系统配合,用于基于所述文件的MD5值判断所述文件是否存在于分布式存储对象中;
如果所述待上传文件不存在于对象存储系统中,所述客户端、业务服务端和对象存储系统配合,用于执行:对所述待上传文件进行分片上传,对于每个分片,基于分片的MD值验证客户端与业务服务端之间的分片上传以及业务服务端与对象存储系统之间的分片上传,如果分片上传失败,重新上传所述分片;
所述待上传文件的所有分片均上传至对象存储系统后,所述客户端、业务服务端和对象存储系统配合,用于执行:基于所述待上传文件的MD值验证客户端、业务服务端和对象存储系统之间的文件上传,如果文件上传失败,重新对所述待上传文件进行分片上传。
作为优选,对于待上传的文件,所述客户端用于执行:将所述待上传文件切分为多个分片,计算每个分片的MD5值,并将所有分片的MD5值结合作为待上传文件的MD值,并将待上传文件的MD5值以及业务参数发送至业务服务端,以初始化分片上传任务;
对应的,所述业务服务端用于执行:
接收到待上传文件的MD5值以及业务参数后,基于待上传文件的MD5值查询所述待上传文件是否已存在于对象存储系统中;
如果所述待上传文件已存在于对象存储系统中,将所述待上传文件标记为已上传;
如果所述待上传文件未存在于对象存储系统中,将所述待上传文件的MD5值以及业务参数持久化存储。
作为优选,如果所述待上传文件不存在于对象存储系统中,对所述待上传文件进行分片上传之前,所述业务服务端用于执行:
向对象存储系统发送指令初始化分片上传任务,并获取分片上传任务id,所述分片上传任务id用于作为待上传文件分片上传的唯一标识;
根据文件切分规则计算分片大小形成分片信息,所述分片信息包括单个分片的分片大小、最后一个分片的分片大小、以及分片数量;
将所述分片上传任务id以及所述分片信息持久化存储。
作为优选,所述客户端、业务服务端以及对象存储系统配合,用于通过逐次切分并上传分片的形式待对所述待上传文件进行分片上传,对于每个分片的切分上传,所述客户端、业务服务端和对象存储系统用于执行如下:
L1、业务服务端基于分片信息、计算所述分片在待上传文件上的切割位置,并将分片上传任务id以及得到的切割位置发送至客户端;
L2、客户端接收到分片上传任务id以及切割位置后,基于切割位置对待上传文件进行切分、得到当前分片并为当前分片编号,计算当前分片的MD5值,并将当前切片及其编号、当前分片的MD5值以及分片上传任务id上传至业务服务端;
L3、业务服务端接收到当前切片及其编号、当前分片的MD5值以及分片上传任务id后,基于分片上传任务id进行校验,查询对象存储系统中是否已上传当前分片,如果是,不再对当前分片执行分片上传,如果否,执行下一步;
L4、根据分片上传任务id以及分片信息,查询当前分片是否为最后一个分片并计算当前分片应有的大小,将当前分片应有的大小与接收的当前分片的大小进行比对,如果大小值不一致,向客户端返回错误提示,要求客户端对当前分片重新上传,如果大小一致,执行下一步;
L5、业务服务端计算当前分片的MD5值,将计算得到的当前分片的MD5值与接收的当前分片的MD5值进行比对,如果不一致,向客户端返回错误提示,要求客户端对当前分片重新上传,如果一致,执行下一步;
L6、业务服务端将当前分片及其编号上传至对象存储系统,将当前分片的MD5值与从对象存储系统返回的当前分片的eTag值进行比对,如果不一致,业务服务端对当前分片重新上传,如果一致,执行下一步;
其中,对象存储系统接收业务服务端上传的当前分片后,计算当前分片的MD5作为当前分片的eTag值,并将当前分片的eTag值返回业务服务端;
L7、业务服务系统根据分片信息判定当前分片是否为最后一个分片,如果不是,执行步骤L8,如果是,执行如下操作:
基于分片上传任务id从业务服务端查询所有分片的eTag值,将所有分片的eTag值结合作为待上传文件的eTag值;
将计算得到的待上传文件的eTag值与查询到的待上传文件的eTag进行比对,如果一致,所述待上传文件上传成功,如果不一致,重新对所述待上传文件进行分片上传;
L8、将当前分片的MD5值持久化,并通过执行步骤L1-L7计算下一个分片的切割位置并上传下一个分片;
客户端以及业务服务端对当前分片重新上传时,基于当前分片的编号、将对应分片上传操作形成的历史数据覆盖;
对待上传文件重新上传时,基于分片上传任务id、将对应分片上传操作形成的历史数据覆盖。
作为优选,当分片上传过程中产生中断时,所述客户端、业务服务端以及对象存储系统配合,通过通过如下操作对当前分片进行断点续传:
M1、对于待上传的文件,客户端向业务服务端发送断点续传请求,所述断点续传请求中包括文件的MD5值以及分片上传任务id;
M2、业务服务端接收断点续传请求后,基于分片上传任务id查询持久化存储的原文件的MD5值,并与客户端发送的文件的MD5值进行比对,如果不一致,向客户端返回错误提示,要求客户端重新选择文件上传,如果一致,执行M3;
M3、根据分片上传任务id查询对象存储系统中已上传分片的数量,基于已上传分片的数量以及持久化存储的分片信息,对下一个分片执行切分上传操作,直至所有分片切分上传完成。
本发明的基于分布式对象存储的文件上传方法及系统具有以下优点:
1、采用分片上传方式串联客户端、业务服务端、分布式对象存储系统,可以有效降低各节点内存、网络压力,提升系统稳定行;
2、采用分片上传方式上传文件并通过分片的MD5值对上传过程进行完整性校验,及时发现错误并重试,提升效率;
3、提供断点续传,可以大幅度提升系统容错率,避免整个过程重试,进而提升效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
下面结合附图对本发明进一步说明。
图1为实施例1基于分布式对象存储的文件上传方法的流程框图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
本发明实施例提供基于分布式对象存储的文件上传系统,用于解决的技术问题。
实施例1:
本发明一种基于分布式对象存储的文件上传方法,通过分片上传的方式实现所述文件在客户端、业务服务端和对象存储系统之间的上传。
该方法包括如下步骤:
步骤S100、对于待上传的文件,基于所述文件的MD5值判断所述文件是否存在于分布式存储对象中。
作为步骤S100的具体实施,对于待上传的文件,基于所述文件的MD5值判断所述文件是否存在于分布式存储对象中,包括如下步骤:
步骤S110、通过客户端将所述待上传文件切分为多个分片,计算每个分片的MD5值,并将所有分片的MD5值结合作为待上传文件的MD5值;
步骤S120、通过客户端将待上传文件的MD5值以及业务参数发送至业务服务端,以初始化分片上传任务;
步骤S130、业务服务端接收到待上传文件的MD5值以及业务参数后,基于待上传文件的MD5值查询所述待上传文件是否已存在于对象存储系统中;
步骤S140、如果所述待上传文件已存在于对象存储系统中,将所述待上传文件标记为已上传;
如果所述待上传文件未存在于对象存储系统中,通过业务服务端将所述待上传文件的MD5值以及业务参数持久化存储。
基于上述具体流程,当用户选择上传大文件(即文件大小超过一定限制,默认配置为5M)时,客户端(程序、浏览器、app等)进行预处理,包括计算大文件MD5值,整合其他业务参数。
计算大文件MD5值时,受限于计算机性能原因,当文件过大时,MD5值计算速度会大幅度降低,同时会占用大量计算机内存,因此采用分片方式计算,将文件切分成若干片,分别计算MD5值,最后结合起来。
上述步骤完成后,将文件MD5值及其他业务参数发送至业务服务端,以初始化分片上传任务。
当业务服务端接收到客户端发送的参数时,优先根据MD5值查询文件对象存储系统中是否存在相同名称文件(使用MD5值作为文件名称,作为文件唯一标识)。如存在,标识该文件在此之前已上传成功过,不再执行后续上传步骤,直接执行相关业务处理步骤,完成后返回客户端已上传完成,即“秒传”;如不存在,将相关参数进行持久化(即存入数据库或其他持久化工具中),以便上传完成后进行相关业务处理。
步骤S200、如果所述待上传文件不存在于对象存储系统中,对所述待上传文件进行分片上传。
其中,对所述待上传文件进行分片上传时,执行如下:
(1)对于每个分片,基于分片的MD5值验证客户端与业务服务端之间的分片上传以及业务服务端与对象存储系统之间的分片上传,如果分片上传失败,重新上传所述分片;
(2)所述待上传文件的所有分片均上传至对象存储系统后,基于文件的MD5值验证客户端、业务服务端和对象存储系统之间的文件上传,如果文件上传失败,重新对所述待上传文件进行分片上传;
(3)当分片上传过程中产生中断时,对当前分片进行断点续传。
作为步骤S200的具体实施,如果所述待上传文件不存在于对象存储系统中,首先,通过业务服务端向对象存储系统发送指令初始化分片上传任务,并获取分片上传任务id,即upload_id,大文件分片上传任务唯一标识,用于分片上传、查询分片、断点续传等;然后,根据文件切分规则、通过业务服务端计算分片大小形成分片信息,所述分片信息包括单个分片的分片大小、最后一个分片的分片大小、以及分片数量;最后,通过业务服务端将所述分片上传任务id以及所述分片信息持久化存储,以便后续分片上传时取出相应信息。
其中,对待上传文件的切分为均分,即每个分片的大小一致,单考略到文件大小和分片数量的具体需求,最后一个分片的大小可能与其它分片大小不一致,因此需要计算单个分片的分片大小、最后一个分片的分片大小。
执行上述操作后,通过逐次切分并上传分片的形式待对所述待上传文件进行分片上传,对于每个分片,所述分片的切分上传包括如下操作:
L1、基于分片信息,通过业务服务端计算所述分片在待上传文件上的切割位置,并将分片上传任务id以及得到的切割位置发送至客户端;
L2、客户端接收到分片上传任务id以及切割位置后,基于切割位置对待上传文件进行切分、得到当前分片并为当前分片编号,计算当前分片的MD5值,并将当前切片及其编号、当前分片的MD5值以及分片上传任务id上传至业务服务端;
L3、业务服务端接收到当前切片及其编号、当前分片的MD5值以及分片上传任务id后,基于分片上传任务id进行校验,查询对象存储系统中是否已上传当前分片,如果是,表示该分片上传任务已完成或不存在,不再对当前分片执行分片上传,如果否,执行下一步;
L4、根据分片上传任务id以及分片信息,查询当前分片是否为最后一个分片并计算当前分片应有的大小,将当前分片应有的大小与接收的当前分片的大小进行比对,如果大小值不一致,表示客户端切割文件错误,或数据传输中存在数据丢失问题,不再进行后续步骤向客户端返回错误提示,要求客户端对当前分片重新上传,如果大小一致,执行下一步;
L5、业务服务端计算当前分片的MD5值,将计算得到的当前分片的MD5值与接收的当前分片的MD5值进行比对,如果不一致,表示客户端计算分片md5值错误或文件传输过程中损坏,不再进行后续步骤,向客户端返回错误提示,要求客户端对当前分片重新上传,如果一致,执行下一步;
L6、业务服务端将当前分片及其编号上传至对象存储系统,将当前分片的MD5值与从对象存储系统返回的当前分片的eTag值进行比对,如果不一致,表示传输过程中文件损坏,业务服务端对当前分片重新上传,如果一致,则表示传输过程无误,执行下一步;
其中,对象存储系统接收业务服务端上传的当前分片后,计算当前分片的MD5作为当前分片的eTag值,并将当前分片的eTag值返回业务服务端;
L7、业务服务系统根据分片信息判定当前分片是否为最后一个分片,如果不是,执行步骤L8,如果是,执行如下操作:
基于分片上传任务id从业务服务端查询所有分片的eTag值,将所有分片的eTag值结合作为待上传文件的eTag值;
将计算得到的待上传文件的eTag值与查询到的待上传文件的eTag进行比对,如果一致,所述待上传文件上传成功,如果不一致,重新对所述待上传文件进行分片上传;
L8、将当前分片的MD5值持久化,并通过执行步骤L1-L7计算下一个分片的切割位置并上传下一个分片。
本实施例中,客户端以及业务服务端对当前分片重新上传时,基于当前分片的编号、将对应分片上传操作形成的历史数据覆盖。
对待上传文件重新上传时,基于分片上传任务id、将对应分片上传操作形成的历史数据覆盖。
如上传过程中出现中断现象,如客户端退出或重启、网络断开链接、业务服务端重启等,客户端执行断点续传相关操作。
本实施例中,断点续传包括如下步骤:
M1、对于待上传的文件,客户端向业务服务端发送断点续传请求,所述断点续传请求中包括文件的MD5值以及分片上传任务id;
M2、业务服务端接收断点续传请求后,基于分片上传任务id查询持久化存储的原文件的MD5值,并与客户端发送的文件的MD5值进行比对,如果不一致,向客户端返回错误提示,要求客户端重新选择文件上传,如果一致,执行M3;
M3、根据分片上传任务id查询对象存储系统中已上传分片的数量,基于已上传分片的数量以及持久化存储的分片信息,对下一个分片执行切分上传操作,直至所有分片切分上传完成。
文件上传完成后,业务服务端取出持久化工具中存放的业务相关数据,进行业务处理,至此,大文件上传完成。
实施例2:
本发明一种基于分布式对象存储的文件上传系统,包括客户端、业务服务端和对象存储系统,所述客户端、业务服务端和对象存储系统配合,用于通过实施例1公开的方法实现文件在客户端、业务服务端和对象存储系统之间的上传。
对于待上传的文件,所述客户端、业务服务端和对象存储系统配合,用于基于所述文件的MD5值判断所述文件是否存在于分布式存储对象中。
作为具体实施,对于待上传的文件,所述客户端用于执行:将所述待上传文件切分为多个分片,计算每个分片的MD5值,并将所有分片的MD5值结合作为待上传文件的MD值,并将待上传文件的MD5值以及业务参数发送至业务服务端,以初始化分片上传任务。
对应的,所述业务服务端用于执行:接收到待上传文件的MD5值以及业务参数后,基于待上传文件的MD5值查询所述待上传文件是否已存在于对象存储系统中;如果所述待上传文件已存在于对象存储系统中,将所述待上传文件标记为已上传;如果所述待上传文件未存在于对象存储系统中,将所述待上传文件的MD5值以及业务参数持久化存储。
在该系统的应用过程中,当用户选择上传大文件(即文件大小超过一定限制,默认配置为5M)时,客户端(程序、浏览器、app等)进行预处理,包括计算大文件MD5值,整合其他业务参数。
计算大文件MD5值时,受限于计算机性能原因,当文件过大时,MD5值计算速度会大幅度降低,同时会占用大量计算机内存,因此采用分片方式计算,将文件切分成若干片,分别计算MD5值,最后结合起来。
当业务服务端接收到客户端发送的参数时,优先根据MD5值查询文件对象存储系统中是否存在相同名称文件(使用MD5值作为文件名称,作为文件唯一标识)。如存在,标识该文件在此之前已上传成功过,不再执行后续上传步骤,直接执行相关业务处理步骤,完成后返回客户端已上传完成,即“秒传”;如不存在,将相关参数进行持久化(即存入数据库或其他持久化工具中),以便上传完成后进行相关业务处理。
如果所述待上传文件不存在于对象存储系统中,所述客户端、业务服务端和对象存储系统配合,用于对所述待上传文件进行分片上传。对所述待上传文件进行分片上传时,所述客户端、业务服务端和对象存储系统配合用于执行如下:
(1)对于每个分片,基于分片的MD5值验证客户端与业务服务端之间的分片上传以及业务服务端与对象存储系统之间的分片上传,如果分片上传失败,重新上传所述分片;
(2)所述待上传文件的所有分片均上传至对象存储系统后,基于文件的MD5值验证客户端、业务服务端和对象存储系统之间的文件上传,如果文件上传失败,重新对所述待上传文件进行分片上传;
(3)当分片上传过程中产生中断时,对当前分片进行断点续传。
作为具体实施,如果所述待上传文件不存在于对象存储系统中,对所述待上传文件进行分片上传之前,所述业务服务端用于执行:
(1)向对象存储系统发送指令初始化分片上传任务,并获取分片上传任务id,所述分片上传任务id用于作为待上传文件分片上传的唯一标识;
(2)根据文件切分规则计算分片大小形成分片信息,所述分片信息包括单个分片的分片大小、最后一个分片的分片大小、以及分片数量;
(3)将所述分片上传任务id以及所述分片信息持久化存储。
其中,对待上传文件的切分为均分,即每个分片的大小一致,单考略到文件大小和分片数量的具体需求,最后一个分片的大小可能与其它分片大小不一致,因此需要计算单个分片的分片大小、最后一个分片的分片大小。
本实施例中,客户端、业务服务端以及对象存储系统配合,用于通过逐次切分并上传分片的形式待对所述待上传文件进行分片上传。对于每个分片的切分上传,所述客户端、业务服务端和对象存储系统用于执行如下:
L1、业务服务端基于分片信息、计算所述分片在待上传文件上的切割位置,并将分片上传任务id以及得到的切割位置发送至客户端;
L2、客户端接收到分片上传任务id以及切割位置后,基于切割位置对待上传文件进行切分、得到当前分片并为当前分片编号,计算当前分片的MD5值,并将当前切片及其编号、当前分片的MD5值以及分片上传任务id上传至业务服务端;
L3、业务服务端接收到当前切片及其编号、当前分片的MD5值以及分片上传任务id后,基于分片上传任务id进行校验,查询对象存储系统中是否已上传当前分片,如果是,不再对当前分片执行分片上传,如果否,执行下一步;
L4、根据分片上传任务id以及分片信息,查询当前分片是否为最后一个分片并计算当前分片应有的大小,将当前分片应有的大小与接收的当前分片的大小进行比对,如果大小值不一致,向客户端返回错误提示,要求客户端对当前分片重新上传,如果大小一致,执行下一步;
L5、业务服务端计算当前分片的MD5值,将计算得到的当前分片的MD5值与接收的当前分片的MD5值进行比对,如果不一致,向客户端返回错误提示,要求客户端对当前分片重新上传,如果一致,执行下一步;
L6、业务服务端将当前分片及其编号上传至对象存储系统,将当前分片的MD5值与从对象存储系统返回的当前分片的eTag值进行比对,如果不一致,业务服务端对当前分片重新上传,如果一致,执行下一步;
其中,对象存储系统接收业务服务端上传的当前分片后,计算当前分片的MD5作为当前分片的eTag值,并将当前分片的eTag值返回业务服务端;
L7、业务服务系统根据分片信息判定当前分片是否为最后一个分片,如果不是,执行步骤L8,如果是,执行如下操作:
基于分片上传任务id从业务服务端查询所有分片的eTag值,将所有分片的eTag值结合作为待上传文件的eTag值;
将计算得到的待上传文件的eTag值与查询到的待上传文件的eTag进行比对,如果一致,所述待上传文件上传成功,如果不一致,重新对所述待上传文件进行分片上传;
L8、将当前分片的MD5值持久化,并通过执行步骤L1-L7计算下一个分片的切割位置并上传下一个分片;
客户端以及业务服务端对当前分片重新上传时,基于当前分片的编号、将对应分片上传操作形成的历史数据覆盖;
对待上传文件重新上传时,基于分片上传任务id、将对应分片上传操作形成的历史数据覆盖。
客户端、业务服务端以及对象存储系统配合,用于通过如下操作对当前分片进行断点续传:
M1、对于待上传的文件,客户端向业务服务端发送断点续传请求,所述断点续传请求中包括文件的MD5值以及分片上传任务id;
M2、业务服务端接收断点续传请求后,基于分片上传任务id查询持久化存储的原文件的MD5值,并与客户端发送的文件的MD5值进行比对,如果不一致,向客户端返回错误提示,要求客户端重新选择文件上传,如果一致,执行M3;
M3、根据分片上传任务id查询对象存储系统中已上传分片的数量,基于已上传分片的数量以及持久化存储的分片信息,对下一个分片执行切分上传操作,直至所有分片切分上传完成。
上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的代码审核手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。
Claims (10)
1.一种基于分布式对象存储的文件上传方法,其特征在于,通过分片上传的方式实现所述文件在客户端、业务服务端和对象存储系统之间的上传,所述方法包括如下步骤:
对于待上传的文件,基于所述文件的MD5值判断所述文件是否存在于分布式存储对象中;
如果所述待上传文件不存在于对象存储系统中,对所述待上传文件进行分片上传;
对所述待上传文件进行分片上传时,执行如下:
对于每个分片,基于分片的MD5值验证客户端与业务服务端之间的分片上传以及业务服务端与对象存储系统之间的分片上传,如果分片上传失败,重新上传所述分片;
所述待上传文件的所有分片均上传至对象存储系统后,基于文件的MD5值验证客户端、业务服务端和对象存储系统之间的文件上传,如果文件上传失败,重新对所述待上传文件进行分片上传;
当分片上传过程中产生中断时,对当前分片进行断点续传。
2.根据权利要求1所述的分布式对象存储的文件上传方法,其特征在于,对于待上传的文件,基于所述文件的MD5值判断所述文件是否存在于分布式存储对象中,包括如下步骤:
通过客户端将所述待上传文件切分为多个分片,计算每个分片的MD5值,并将所有分片的MD5值结合作为待上传文件的MD值;
通过客户端将待上传文件的MD5值以及业务参数发送至业务服务端,以初始化分片上传任务;
业务服务端接收到待上传文件的MD5值以及业务参数后,基于待上传文件的MD5值查询所述待上传文件是否已存在于对象存储系统中;
如果所述待上传文件已存在于对象存储系统中,将所述待上传文件标记为已上传;
如果所述待上传文件未存在于对象存储系统中,通过业务服务端将所述待上传文件的MD5值以及业务参数持久化存储。
3.根据权利要求1或2所述的分布式对象存储的文件上传方法,其特征在于,如果所述待上传文件不存在于对象存储系统中,对所述待上传文件进行分配上传之前,执行如下操作:
通过业务服务端向对象存储系统发送指令初始化分片上传任务,并获取分片上传任务id,所述分片上传任务id用于作为待上传文件分片上传的唯一标识;
根据文件切分规则、通过业务服务端计算分片大小形成分片信息,所述分片信息包括单个分片的分片大小、最后一个分片的分片大小、以及分片数量;
通过业务服务端将所述分片上传任务id以及所述分片信息持久化存储。
4.根据权利要求3所述的分布式对象存储的文件上传方法,其特征在于,通过逐次切分并上传分片的形式待对所述待上传文件进行分片上传,对于每个分片,所述分片的切分上传包括如下操作:
L1、基于分片信息,通过业务服务端计算所述分片在待上传文件上的切割位置,并将分片上传任务id以及得到的切割位置发送至客户端;
L2、客户端接收到分片上传任务id以及切割位置后,基于切割位置对待上传文件进行切分、得到当前分片并为当前分片编号,计算当前分片的MD5值,并将当前切片及其编号、当前分片的MD5值以及分片上传任务id上传至业务服务端;
L3、业务服务端接收到当前切片及其编号、当前分片的MD5值以及分片上传任务id后,基于分片上传任务id进行校验,查询对象存储系统中是否已上传当前分片,如果是,不再对当前分片执行分片上传,如果否,执行下一步;
L4、根据分片上传任务id以及分片信息,查询当前分片是否为最后一个分片并计算当前分片应有的大小,将当前分片应有的大小与接收的当前分片的大小进行比对,如果大小值不一致,向客户端返回错误提示,要求客户端对当前分片重新上传,如果大小一致,执行下一步;
L5、业务服务端计算当前分片的MD5值,将计算得到的当前分片的MD5值与接收的当前分片的MD5值进行比对,如果不一致,向客户端返回错误提示,要求客户端对当前分片重新上传,如果一致,执行下一步;
L6、业务服务端将当前分片及其编号上传至对象存储系统,将当前分片的MD5值与从对象存储系统返回的当前分片的eTag值进行比对,如果不一致,业务服务端对当前分片重新上传,如果一致,执行下一步;
其中,对象存储系统接收业务服务端上传的当前分片后,计算当前分片的MD5作为当前分片的eTag值,并将当前分片的eTag值返回业务服务端;
L7、业务服务系统根据分片信息判定当前分片是否为最后一个分片,如果不是,执行步骤L8,如果是,执行如下操作:
基于分片上传任务id从业务服务端查询所有分片的eTag值,将所有分片的eTag值结合作为待上传文件的eTag值;
将计算得到的待上传文件的eTag值与查询到的待上传文件的eTag进行比对,如果一致,所述待上传文件上传成功,如果不一致,重新对所述待上传文件进行分片上传;
L8、将当前分片的MD5值持久化,并通过执行步骤L1-L7计算下一个分片的切割位置并上传下一个分片;
客户端以及业务服务端对当前分片重新上传时,基于当前分片的编号、将对应分片上传操作形成的历史数据覆盖;
对待上传文件重新上传时,基于分片上传任务id、将对应分片上传操作形成的历史数据覆盖。
5.根据权利要求4所述的分布式对象存储的文件上传方法,其特征在于,所述断点续传包括如下步骤:
M1、对于待上传的文件,客户端向业务服务端发送断点续传请求,所述断点续传请求中包括文件的MD5值以及分片上传任务id;
M2、业务服务端接收断点续传请求后,基于分片上传任务id查询持久化存储的原文件的MD5值,并与客户端发送的文件的MD5值进行比对,如果不一致,向客户端返回错误提示,要求客户端重新选择文件上传,如果一致,执行M3;
M3、根据分片上传任务id查询对象存储系统中已上传分片的数量,基于已上传分片的数量以及持久化存储的分片信息,对下一个分片执行切分上传操作,直至所有分片切分上传完成。
6.一种基于分布式对象存储的文件上传系统,其特征在于,包括客户端、业务服务端和对象存储系统,所述客户端、业务服务端和对象存储系统配合,用于通过如权利要求1-5任一项所述的方法实现文件在客户端、业务服务端和对象存储系统之间的上传;
对于待上传的文件,所述客户端、业务服务端和对象存储系统配合,用于基于所述文件的MD5值判断所述文件是否存在于分布式存储对象中;
如果所述待上传文件不存在于对象存储系统中,所述客户端、业务服务端和对象存储系统配合,用于对所述待上传文件进行分片上传;
对所述待上传文件进行分片上传时,所述客户端、业务服务端和对象存储系统配合用于执行如下:
对于每个分片,基于分片的MD5值验证客户端与业务服务端之间的分片上传以及业务服务端与对象存储系统之间的分片上传,如果分片上传失败,重新上传所述分片;
所述待上传文件的所有分片均上传至对象存储系统后,基于文件的MD5值验证客户端、业务服务端和对象存储系统之间的文件上传,如果文件上传失败,重新对所述待上传文件进行分片上传;
当分片上传过程中产生中断时,对当前分片进行断点续传。
7.根据权利要求6所述的基于分布式对象存储的文件上传系统,其特征在于,对于待上传的文件,所述客户端用于执行:将所述待上传文件切分为多个分片,计算每个分片的MD5值,并将所有分片的MD5值结合作为待上传文件的MD值,并将待上传文件的MD5值以及业务参数发送至业务服务端,以初始化分片上传任务;
对应的,所述业务服务端用于执行:
接收到待上传文件的MD5值以及业务参数后,基于待上传文件的MD5值查询所述待上传文件是否已存在于对象存储系统中;
如果所述待上传文件已存在于对象存储系统中,将所述待上传文件标记为已上传;
如果所述待上传文件未存在于对象存储系统中,将所述待上传文件的MD5值以及业务参数持久化存储。
8.根据权利要求6或7所述的基于分布式对象存储的文件上传系统,其特征在于,如果所述待上传文件不存在于对象存储系统中,对所述待上传文件进行分片上传之前,所述业务服务端用于执行:
向对象存储系统发送指令初始化分片上传任务,并获取分片上传任务id,所述分片上传任务id用于作为待上传文件分片上传的唯一标识;
根据文件切分规则计算分片大小形成分片信息,所述分片信息包括单个分片的分片大小、最后一个分片的分片大小、以及分片数量;
将所述分片上传任务id以及所述分片信息持久化存储。
9.根据权利要求8所述的基于分布式对象存储的文件上传系统,其特征在于,所述客户端、业务服务端以及对象存储系统配合,用于通过逐次切分并上传分片的形式待对所述待上传文件进行分片上传,对于每个分片的切分上传,所述客户端、业务服务端和对象存储系统用于执行如下:
L1、业务服务端基于分片信息、计算所述分片在待上传文件上的切割位置,并将分片上传任务id以及得到的切割位置发送至客户端;
L2、客户端接收到分片上传任务id以及切割位置后,基于切割位置对待上传文件进行切分、得到当前分片并为当前分片编号,计算当前分片的MD5值,并将当前切片及其编号、当前分片的MD5值以及分片上传任务id上传至业务服务端;
L3、业务服务端接收到当前切片及其编号、当前分片的MD5值以及分片上传任务id后,基于分片上传任务id进行校验,查询对象存储系统中是否已上传当前分片,如果是,不再对当前分片执行分片上传,如果否,执行下一步;
L4、根据分片上传任务id以及分片信息,查询当前分片是否为最后一个分片并计算当前分片应有的大小,将当前分片应有的大小与接收的当前分片的大小进行比对,如果大小值不一致,向客户端返回错误提示,要求客户端对当前分片重新上传,如果大小一致,执行下一步;
L5、业务服务端计算当前分片的MD5值,将计算得到的当前分片的MD5值与接收的当前分片的MD5值进行比对,如果不一致,向客户端返回错误提示,要求客户端对当前分片重新上传,如果一致,执行下一步;
L6、业务服务端将当前分片及其编号上传至对象存储系统,将当前分片的MD5值与从对象存储系统返回的当前分片的eTag值进行比对,如果不一致,业务服务端对当前分片重新上传,如果一致,执行下一步;
其中,对象存储系统接收业务服务端上传的当前分片后,计算当前分片的MD5作为当前分片的eTag值,并将当前分片的eTag值返回业务服务端;
L7、业务服务系统根据分片信息判定当前分片是否为最后一个分片,如果不是,执行步骤L8,如果是,执行如下操作:
基于分片上传任务id从业务服务端查询所有分片的eTag值,将所有分片的eTag值结合作为待上传文件的eTag值;
将计算得到的待上传文件的eTag值与查询到的待上传文件的eTag进行比对,如果一致,所述待上传文件上传成功,如果不一致,重新对所述待上传文件进行分片上传;
L8、将当前分片的MD5值持久化,并通过执行步骤L1-L7计算下一个分片的切割位置并上传下一个分片;
客户端以及业务服务端对当前分片重新上传时,基于当前分片的编号、将对应分片上传操作形成的历史数据覆盖;
对待上传文件重新上传时,基于分片上传任务id、将对应分片上传操作形成的历史数据覆盖。
10.根据权利要求9所述的基于分布式对象存储的文件上传系统,其特征在于,所述客户端、业务服务端以及对象存储系统配合,用于通过如下操作对当前分片进行断点续传:
M1、对于待上传的文件,客户端向业务服务端发送断点续传请求,所述断点续传请求中包括文件的MD5值以及分片上传任务id;
M2、业务服务端接收断点续传请求后,基于分片上传任务id查询持久化存储的原文件的MD5值,并与客户端发送的文件的MD5值进行比对,如果不一致,向客户端返回错误提示,要求客户端重新选择文件上传,如果一致,执行M3;
M3、根据分片上传任务id查询对象存储系统中已上传分片的数量,基于已上传分片的数量以及持久化存储的分片信息,对下一个分片执行切分上传操作,直至所有分片切分上传完成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211244478.XA CN116032913B (zh) | 2022-10-12 | 2022-10-12 | 基于分布式对象存储的文件上传方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211244478.XA CN116032913B (zh) | 2022-10-12 | 2022-10-12 | 基于分布式对象存储的文件上传方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116032913A true CN116032913A (zh) | 2023-04-28 |
CN116032913B CN116032913B (zh) | 2024-08-23 |
Family
ID=86069545
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211244478.XA Active CN116032913B (zh) | 2022-10-12 | 2022-10-12 | 基于分布式对象存储的文件上传方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116032913B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105635324A (zh) * | 2016-03-17 | 2016-06-01 | 新浪网技术(中国)有限公司 | 用于浏览器或服务器的大文件上传、续传方法和装置 |
CN109361772A (zh) * | 2018-12-13 | 2019-02-19 | 浪潮电子信息产业股份有限公司 | 一种分布式对象存储系统中文件上传方法及装置 |
CN109714330A (zh) * | 2018-12-24 | 2019-05-03 | 武汉烽火众智数字技术有限责任公司 | 一种跨网络的断点续传方法和系统 |
CN110247986A (zh) * | 2019-06-28 | 2019-09-17 | 北京奇艺世纪科技有限公司 | 一种文件传输方法、装置及电子设备 |
CN110401725A (zh) * | 2019-08-23 | 2019-11-01 | 深圳市鹰硕技术有限公司 | 文件上传方法、装置、终端、服务器、系统及存储介质 |
CN110430274A (zh) * | 2019-08-09 | 2019-11-08 | 西藏宁算科技集团有限公司 | 一种基于云存储的文件下载方法及系统 |
CN110474937A (zh) * | 2018-05-09 | 2019-11-19 | 深圳企业云科技股份有限公司 | 超大文件分段续传方法及其系统 |
CN113568884A (zh) * | 2021-09-26 | 2021-10-29 | 武汉四通信息服务有限公司 | 一种文件管理方法、装置、电子设备及存储介质 |
CN114039971A (zh) * | 2021-11-11 | 2022-02-11 | 北京神舟航天软件技术股份有限公司 | Bs模式下基于文件流的大文件并发传输方法 |
WO2022088807A1 (zh) * | 2020-10-30 | 2022-05-05 | 深圳壹账通智能科技有限公司 | 基于区块链的分布式文件存储方法、系统、服务器及客户端 |
CN114615258A (zh) * | 2022-03-28 | 2022-06-10 | 重庆长安汽车股份有限公司 | 大文件分片上传到文件服务端的方法及装置 |
CN115865895A (zh) * | 2022-11-22 | 2023-03-28 | 北京中关村科金技术有限公司 | 一种文件上传方法、装置及存储介质 |
-
2022
- 2022-10-12 CN CN202211244478.XA patent/CN116032913B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105635324A (zh) * | 2016-03-17 | 2016-06-01 | 新浪网技术(中国)有限公司 | 用于浏览器或服务器的大文件上传、续传方法和装置 |
CN110474937A (zh) * | 2018-05-09 | 2019-11-19 | 深圳企业云科技股份有限公司 | 超大文件分段续传方法及其系统 |
CN109361772A (zh) * | 2018-12-13 | 2019-02-19 | 浪潮电子信息产业股份有限公司 | 一种分布式对象存储系统中文件上传方法及装置 |
CN109714330A (zh) * | 2018-12-24 | 2019-05-03 | 武汉烽火众智数字技术有限责任公司 | 一种跨网络的断点续传方法和系统 |
CN110247986A (zh) * | 2019-06-28 | 2019-09-17 | 北京奇艺世纪科技有限公司 | 一种文件传输方法、装置及电子设备 |
CN110430274A (zh) * | 2019-08-09 | 2019-11-08 | 西藏宁算科技集团有限公司 | 一种基于云存储的文件下载方法及系统 |
CN110401725A (zh) * | 2019-08-23 | 2019-11-01 | 深圳市鹰硕技术有限公司 | 文件上传方法、装置、终端、服务器、系统及存储介质 |
WO2022088807A1 (zh) * | 2020-10-30 | 2022-05-05 | 深圳壹账通智能科技有限公司 | 基于区块链的分布式文件存储方法、系统、服务器及客户端 |
CN113568884A (zh) * | 2021-09-26 | 2021-10-29 | 武汉四通信息服务有限公司 | 一种文件管理方法、装置、电子设备及存储介质 |
CN114039971A (zh) * | 2021-11-11 | 2022-02-11 | 北京神舟航天软件技术股份有限公司 | Bs模式下基于文件流的大文件并发传输方法 |
CN114615258A (zh) * | 2022-03-28 | 2022-06-10 | 重庆长安汽车股份有限公司 | 大文件分片上传到文件服务端的方法及装置 |
CN115865895A (zh) * | 2022-11-22 | 2023-03-28 | 北京中关村科金技术有限公司 | 一种文件上传方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116032913B (zh) | 2024-08-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111475576A (zh) | 基于区块链的分布式数据库存储方法及系统 | |
CN110213623B (zh) | 视频上传方法、视频上传装置及计算机可读存储介质 | |
EP3832452A1 (en) | Log printing method and system, server | |
CN112632008B (zh) | 一种数据分片的传输方法、装置及计算机设备 | |
CN112822260A (zh) | 文件传输方法及装置、电子设备、存储介质 | |
CN114615258A (zh) | 大文件分片上传到文件服务端的方法及装置 | |
CN110912805B (zh) | 消息读取状态的同步方法、终端、服务端及系统 | |
CN116016549A (zh) | 数据文件动态分片上传的方法及其系统 | |
CN116032913B (zh) | 基于分布式对象存储的文件上传方法及系统 | |
CN112969198A (zh) | 数据传输方法、终端及存储介质 | |
CN108200157B (zh) | 主节点触发回退的日志同步方法及装置 | |
CN110275793A (zh) | 一种用于MongoDB数据分片集群的检测方法及设备 | |
CN108965463B (zh) | 一种文件传输方法、装置和系统 | |
CN109905459B (zh) | 一种数据传输方法及装置 | |
CN116366629A (zh) | 一种文件上传、获取方法、计算机设备及存储介质 | |
CN115801765A (zh) | 文件传输方法、装置、系统、电子设备及存储介质 | |
CN113111040B (zh) | 一种文件解压方法及装置 | |
CN115396423A (zh) | 文件传输方法、装置、电子设备及存储介质 | |
CN115766696A (zh) | 一种文件上传方法、装置、电子设备及存储介质 | |
CN114328081A (zh) | 一种存储节点性能数据传输方法、装置、设备及介质 | |
CN114584573A (zh) | 一种基于长轮询机制的节点机信息同步方法 | |
CN110309133B (zh) | 批量数据的处理方法和装置 | |
CN117118974A (zh) | 文件断点上传方法、装置、设备及存储介质 | |
CN112039932A (zh) | 文件传输方法和装置 | |
CN112925841B (zh) | 分布式jdbc实现方法、设备及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |