CN117155922A - 一种文件传输方法和装置 - Google Patents

一种文件传输方法和装置 Download PDF

Info

Publication number
CN117155922A
CN117155922A CN202311422824.3A CN202311422824A CN117155922A CN 117155922 A CN117155922 A CN 117155922A CN 202311422824 A CN202311422824 A CN 202311422824A CN 117155922 A CN117155922 A CN 117155922A
Authority
CN
China
Prior art keywords
file
block
transmitted
threads
thread
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
Application number
CN202311422824.3A
Other languages
English (en)
Other versions
CN117155922B (zh
Inventor
刘春伟
杨林
夏梓俊
彭修乾
曹旭祥
段莉莉
王红豆
高佑强
张兵
李信东
宋木清
李菲菲
刘颖超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National Supercomputer Center In Tianjin
Original Assignee
National Supercomputer Center In Tianjin
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by National Supercomputer Center In Tianjin filed Critical National Supercomputer Center In Tianjin
Priority to CN202311422824.3A priority Critical patent/CN117155922B/zh
Publication of CN117155922A publication Critical patent/CN117155922A/zh
Application granted granted Critical
Publication of CN117155922B publication Critical patent/CN117155922B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本公开涉及一种文件传输方法和装置。文件传输方法应用于后端,后端包括可并行执行的多个第一线程,方法包括:获取待传输文件的传输请求;若传输请求是由前端包括的可并行执行的多个第二线程发送的,则确定待传输文件的传输方式为后端从前端下载文件,其中,传输请求包括第一文件块的传输信息,第一文件块是前端对待传输文件进行分块计算得到的;利用第一线程根据预设分块大小和传输信息进行第一文件块的迭代下载,其中,第一文件块是第二线程从前端发送至后端的。本公开提供的方法,利用多线程并行传输,有效提高了计算性能利用率,进而提高了文件传输速度。

Description

一种文件传输方法和装置
技术领域
本公开涉及数据处理技术领域,尤其涉及一种文件传输方法和装置。
背景技术
目前,在做平台开发时,常常遇到文件传输功能的开发,主要包含文件上传和文件下载。文件传输速度对用户使用体验影响很大,快速的文件传输能提升用户体验,给用户留下良好印象,为用户成为持久用户提供基础环境。在网络带宽价格降低的情况下,平台部署后,网络出口带宽水平已经较高,但是还是存在一些瓶颈对文件传输速度产生限制,其中比较关键的一点就是常规的基于前端和服务器端(Browser Server,bs)架构的文件传输大部分采用单线程传输,导致前端(b端)计算性能利用率低,服务器端(s端)计算性能利用率低,网络带宽利用率低,导致文件传输速度受到限制。
发明内容
为了解决上述技术问题,本公开提供了一种文件传输方法和装置,利用多线程并行传输,有效提高了计算性能利用率,进而提高了文件传输速度。
第一方面,本公开实施例提供了一种文件传输方法,应用于后端,后端包括可并行执行的多个第一线程,方法包括:
获取待传输文件的传输请求;
若所述传输请求是由前端包括的可并行执行的多个第二线程发送的,则确定所述待传输文件的传输方式为所述后端从所述前端下载文件,其中,所述传输请求包括第一文件块的传输信息,所述第一文件块是所述前端对所述待传输文件进行分块计算得到的;
利用所述第一线程根据预设分块大小和所述传输信息进行所述第一文件块的迭代下载,其中,所述第一文件块是所述第二线程从所述前端传输至所述后端的。
第二方面,本公开实施例提供了一种文件传输方法,应用于前端,所述前端包括可并行执行的多个第二线程,所述方法包括:
获取待传输文件,并设置所述待传输文件的传输信息,所述传输信息包括并行线程数量和每个第二线程可传输的文件大小;
根据所述待传输文件的大小和所述每个第二线程可传输的文件大小,计算所述前端需要启动的线程总数;
根据所述每个第二线程可传输的文件大小和所述线程总数对所述待传输文件进行分块计算,确定所述每个第二线程需要传输的第一文件块;
启动所述并行线程数量个第二线程以将所述第一文件块发送至后端,所述后端用于利用可并行执行的多个第一线程根据预设分块大小和所述第一文件块的传输信息进行所述第一文件块的迭代下载。
第三方面,本公开实施例提供了一种电子设备,包括:
存储器;
处理器;以及
计算机程序;
其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现上述的文件传输方法。
第四方面,本公开实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的文件传输方法的步骤。
本申请提供了一种文件传输方法,应用于后端,后端包括可并行执行的多个第一线程,方法包括:获取待传输文件的传输请求;若传输请求是由前端包括的可并行执行的多个第二线程发送的,则确定待传输文件的传输方式为后端从前端下载文件,其中,传输请求包括第一文件块的传输信息,第一文件块是前端对待传输文件进行分块计算得到的;利用第一线程根据预设分块大小和传输信息进行第一文件块的迭代下载,其中,第一文件块是第二线程从前端发送至后端的。本公开提供的方法,利用多线程并行传输,有效提高了计算性能利用率,进而提高了文件传输速度。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的一种用于后端的文件传输方法的流程示意图;
图2为本公开实施例提供的一种后端下载文件的流程示意图;
图3a为本公开实施例提供的一种后端文件分块上传的流程示意图;
图3b为本公开实施例提供的一种后端文件合并上传的流程示意图;
图4为本公开实施例提供的一种用于前端的文件传输方法的流程示意图;
图5为本公开实施例提供的一种前端上传文件的流程示意图;
图6为本公开实施例提供的一种前端下载文件的流程示意图;
图7为本公开实施例提供的一种文件传输装置的结构示意图;
图8为本公开实施例提供的另一种文件传输装置的结构示意图;
图9为本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
针对上述技术问题,本公开实施例提供了一种文件传输方法,后端针对各第一线程下载文件块的分片传输,提升了各第一线程文件块的下载速度。其次,后端通过将文件分块缓存至文件夹的方法,替换了传统缓存至内存的方法,有效解决了传统缓存至内存可能出现的键(key)数量限制,key存储时长限制,以及值(value)存储长度限制等导致的大文件上传时文件块丢失问题。另外,后端通过迭代多线程并行处理技术,实现了文件块合并时多线程并行化处理,提升了文件块合并速度。具体通过下述一个或多个实施例进行详细说明。
图1为本公开实施例提供的一种用于后端的文件传输方法的流程示意图,应用于后端,后端包括可并行执行的多个第一线程,具体包括如图1所示的如下步骤S110至S130:
可理解的,在服务端构建多线程并行下载后端接口,下载后端接口用于实现文件多线程并行下载后端多线程处理;在文件块多线程并行下载后端处理时,针对各个第一线程,后端采取针对请求文件块分片传输方案,来提升各线程文件块传输速度,也就是每个第一线程处理至少一个文件块,在处理每个文件块时将每个文件块分片传输。在服务端构建多线程并行上传后端接口,上传后端接口用于实现文件多线程并行上传后端多线程处理;在进行文件多线程并行上传后端处理时,针对各个第一线程,后端采取文件存储方法代替传统的基于内存的缓存方案,解决了传统的基于内存的缓存方案中可能存在的key存储数量有限问题所导致的超大文件上传时key丢失问题,key存储时间有限问题所导致的超大文件上传时key丢失问题,value存储大小有限所导致的超大文件上传时value丢失问题;文件多线程并行上传后端处理时,针对各个分块上传线程结束后,采用迭代多线程并行处理技术进行文件合并,提升了文件合并速度。其中,服务器可以理解为后端(s端),后端包括上传后端接口和下载后端接口。
S110、获取待传输文件的传输请求。
可理解的,获取待传输文件的传输请求,传输请求可能是前端包括的第二线程发送的,该种情况下,后端需要下载文件,也可能是后端自行触发的,该种情况下,后端需要上传文件。
S120、若所述传输请求是由前端包括的可并行执行的多个第二线程发送的,则确定所述待传输文件的传输方式为所述后端从所述前端下载文件。
其中,所述传输请求包括第一文件块的传输信息,所述第一文件块是所述前端对所述待传输文件进行分块计算得到的。
可理解的,在上述S110的基础上,若传输请求是前端包括的第二线程发送的,每个第二线程都会发送一个下载请求,该种情况下,直接确定待传输文件在后端的传输方式为下载文件,也就是前端上传文件后端下载文件。
S130、利用所述第一线程根据预设分块大小和所述传输信息进行所述第一文件块的迭代下载。
其中,所述第一文件块是所述第二线程从所述前端传输至所述后端的。
可理解的,在上述S120的基础上,接收到第二线程传输的第一文件块后,利用可并行执行的多个第一线程根据预设分块大小对每个第一文件块进行迭代下载,迭代下载是指将一个文件块分多次下载,可以理解为文件块的分片下载。
可选的,上述S130中根据预设分块大小和所述传输信息进行所述第一文件块的迭代下载,具体通过如下步骤实现:
根据预设分片大小确定初始偏移量,若所述预设分片大小小于所述第一文件块的大小,则设置初始迭代次数;根据所述传输信息、所述初始迭代次数和所述初始偏移量在所述第一文件块中计算需要迭代的目标子文件块的下载起始位置和下载终止位置;根据所述下载起始位置和所述下载终止位置,从所述第一文件块中读取所述目标子文件块以进行所述目标子文件块的一次迭代下载,并累计所述初始迭代次数。
可选的,所述传输信息包括第一文件块的大小以及所述第一文件块在所述待传输文件中的上传起始位置和上传终止位置。
可选的,上述根据所述传输信息、所述初始迭代次数和所述初始偏移量在所述第一文件块中计算需要迭代的目标子文件块的下载起始位置和下载终止位置,具体通过如下步骤实现:
根据所述上传起始位置、所述初始迭代次数和所述初始偏移量计算需要迭代的目标子文件块在所述第一文件块中的下载起始位置;若所述下载起始位置在所述上传终止位置之前,则根据所述下载起始位置和所述预设分块大小确定目标终止位置;判断所述目标终止位置是否在所述上传终止位置之后,若否,则将所述目标终止位置作为所述目标子文件块在所述第一文件块中的下载终止位置;若是,则将所述上传终止位置作为所述下载终止位置。
可理解的,执行文件迭代回传时,设置分片大小,根据分片大小确定初始偏移量,例如,直接将分片大小设置为初始偏移量。若预设分片大小大于第一文件块的大小,则将第一文件块的大小重新设置为初始偏移量。若预设分片大小等于或小于第一文件块的大小,则设置迭代计数器上的初始迭代次数。随后,执行文件块的迭代下载,具体包括:根据传输信息中的上传起始位置、初始迭代次数和初始偏移量计算需要迭代的目标子文件块在第一文件块中的下载起始位置,第一文件块包括多个目标子文件块,上传位置信息可以理解为前端上传的第一文件块在待传输文件中的下载起始点;初始化各次迭代的实际偏移量,例如,将实际偏移量设置为初始偏移量;判断下载起始位置是否大于传输信息中的上传终止位置,也就是判断下载起始位置是否在上传终止位置之前,若否,则结束迭代下载,若是,则继续判断下载起始位置和预设分片;判断目标终止位置是否大于传输信息中的上传终止位置,其中,上传终止位置可以理解为前端上传的第一文件块在待传输文件中的下载结束点,也就是判断目标终止位置是否在上传终止位置之后;若目标终止位置在上传终止位置之前,则将目标终止位置作为目标子文件块在第一文件块中的下载终止位置,并从下载初始位置开始偏移;若目标终止位置在上传终止位置之后,则将上传终止位置作为下载终止位置,并根据上传终止位置和下载起始位置重新计算实际偏移量;根据下载起始位置和下载终止位置,从第一文件块中读取目标子文件块以进行目标子文件块的一次迭代下载,并调整迭代计数器累计初始迭代次数;判断读取的目标子文件块是否为空,若是,则结束迭代下载,若否,则下载该目标子文件块。
示例性的,参见图2,图2为本公开实施例提供的一种后端下载文件的流程示意图,文件多线程并行下载后端处理算法:获取文件下载请求,确定下载请求中包括的文件块大小(bytes)是否为空,若为空则向前端返回整个文件的信息,若不为空,则获取文件总大小(Filesize)和文件块的range参数,range参数包括第一文件块在待传输文件中的下载起始点(offset-old)、下载结束点(endset)和文件块大小(bigset);设置文件块的分片大小(chunk-size),执行文件块迭代回传,具体的,文件块迭代回传流程如下:初始化偏移量,limit=chunk-size;判断chunk-size是否大于bigset,若是,则将limit设置为bigset,若否,则设置迭代计数器,idx=0;开始执行迭代,在没有接收到结束指令的情况下,设置各次迭代文件下载起始点,offset=offset-old+idx*limit;初始化各次迭代实际偏移量,limit-real=limit;判断offset是否大于endset,若是,则结束迭代下载,若否,则计算下载终止点(offset+chunk-size);判断offset+chunk-size是否大于endset,若是,则重新计算实际偏移量,limit-real=endset-offset,若否,则从文件块中的0位置开始偏移offset,设置文件偏移;读取大小为limit-real的子文件块,子文件块记为c;调整迭代计数器,idx=idx+1;判断子文件块不为空,若是,则下载子文件块,若否,则结束迭代流程。
可选的,获取待传输文件的传输请求后,若所述传输请求是由所述后端触发的,所述方法还包括:
确定所述待传输文件的传输方式为所述后端向所述前端上传文件;对所述待传输文件进行分块计算,确定所述后端部署的多个第一线程中每个第一线程对应的第一文件块,其中,所述第一线程用于将对应的第一文件块上传至所述前端;在未检测到文件块合并请求的情况下,利用所述第一线程在执行所述待传输文件的分块上传时将所述第一文件块进行单独的文件缓存,其中,所述文件块合并请求用于指示并行的所述多个第一线程在将对应的所述第一文件块上传时执行文件块的合并操作。
可理解的,若传输请求是由后端自行触发的,也就是后端需要上传文件时,对待传输文件进行分块计算,确定后端部署的多个第一线程中的每个第一线程对应的第一文件块,其中,第一线程用于将对应的第一文件块上传,以供前端下载。
可选的,上述将所述第一文件块进行单独的文件缓存,具体通过如下步骤实现:
获取所述待传输文件的文件编号、所述第一文件块的分块编号和所述第一文件块的分块数据;确定名称为所述文件编号的目标文件夹内是否存在名称为所述分块编号的文件,若所述目标文件夹内存在名称为所述分块编号的第一文件,则判断所述第一文件是否有数据;若所述第一文件中有数据,则判断所述第一文件包括的数据是否和所述分块数据相同,若所述第一文件中没有数据,则将所述分块数据写入所述第一文件;若所述第一文件包括的数据和所述分块数据相同,则进行下一目标文件块的传输,若所述第一文件包括的数据和所述分块数据不同,则将所述分块数据覆盖写入所述第一文件。
可理解的,判断文件块在上传过程中是否需要进行文件合并,在未检测到文件块合并请求的情况下,也就是不需要进行文件合并的情况下,利用多个第一线程在执行待传输文件的分块上传时,每个第一线程将上传成功的第一文件块进行单独的文件缓存,具体的,获取待传输文件的文件编号、第一文件块的分块编号、第一文件块的分块数据和Base64编码,其中,分块数据具体可以是blob数据;判断存储控件中是否有名称为文件编号的目标文件夹,若否,则新建名称为文件编号的目标文件夹,若是,则判断目标文件夹内是否存在名称为分块编号的文件;若目标文件夹内不存在名称为分块编号的文件,则新建名称为分块编号的第一文件,若目标文件夹内存在名称为分块编号的第一文件,则判断第一文件是否有数据;若第一文件中没有数据,则将分块数据写入第一文件进行存储,若第一文件中有数据,说明该文件已经存储过了,则判断第一文件包括的数据是否和分块数据相同;若第一文件包括的数据和分块数据相同,则进行下一目标文件块的传输,若第一文件包括的数据和分块数据不同,则将分块数据覆盖写入第一文件,也就是重新存储。
示例性的,参见图3a,图3a为本公开实施例提供的一种后端文件分块上传的流程示意图,文件多线程并行上传后端处理算法,在不进行文件合并的情况下,包括:获取文件编号(filemad5)、分块编号(chunkmd5)、分块blob数据(chunk)和Base64编码(Base64(chunk));判断是否存储有名称为filemad5的文件夹,若没有名称为filemad5的文件夹,则新建名称为filemad5的文件夹,若有名称为filemad5的文件夹,则判断文件夹内是否有名称为chunkmd5的文件,若没有名称为chunkmd5的文件,则新建名称为chunkmd5的文件,若有名称为chunkmd5的文件,则判断文件是否有数据,若没有数据,则将Base64(chunk)写入该文件,若有数据,则判断该文件中的数据是否等于Base64(chunk),若数据等于Base64(chunk),则结束文件分块上传,若数据不等于Base64(chunk),则将Base64(chunk)覆盖写入该文件。
可选的,在检测到所述文件块合并请求的情况下,所述方法还包括:
获取所述待传输文件的文件编号、所述第一文件块的文件总块数和所述待传输文件的大小;确定名称为所述文件编号的目标文件夹内存储的文件数量是否和所述文件总块数相同,若所述目标文件夹内存储的文件数量和所述文件总块数不同,则生成文件块分块不完整的报错信息;若所述目标文件夹内存储的文件数量和所述文件总块数相同,则执行所有第一文件块的多线程并行合并操作,直至得到最终的合并文件。
可理解的,在不需要进行文件合并的情况下,获取待传输文件的文件编号(Filemd5)、第一文件块的文件总块数(chunks)、待传输文件的大小(filesize)和文件名称(filename);判断是否存储有名称为文件编号的目标文件夹,若没有名称为文件编号的目标文件夹,则生成并返回无分块信息的报错信息,若有名称为文件编号的目标文件夹,则继续判断目标文件夹内存储的文件数量是否和文件总块数相同,若目标文件夹内存储的文件数量和文件总块数不同,则生成并返回文件块分块不完整的报错信息。
可选的,上述执行所有第一文件块的多线程并行合并操作,直至得到最终的合并文件,具体通过如下步骤实现:
设置用于存储所述第一文件块的第一文件路径和用于存储所述第一文件块的合并文件的第二文件路径;根据预设并行线程数和所述文件总块数计算得到第一数值和第二数值;判断所述第一数值是否大于第一预设阈值,若所述第一数值小于所述第一预设阈值,则在所述预设并行线程数不等于第二预设阈值的情况下,根据所述第二预设阈值更新所述文件总块数以重新计算第一数值;若所述第一数值大于所述第一预设阈值,则判断所述第二数值是否等于第三预设阈值,在所述预设并行线程数等于所述第二预设阈值的情况下,或者,在所述第二数值等于所述第三预设阈值的情况下,直接将所述第一数值作为各线程需要合并的文件块数;若所述第二数值不等于所述第三预设阈值,则将所述第一数值作为所述多个第一线程中第一个第一线程到所述第一数值个第一线程的前一个第一线程需要合并的文件块数,并将所述第一数值和所述第二数值的和值作为所述第一数值个第一线程需要合并的文件块数;根据所述每个第一线程需要合并的文件块数,执行所述第一文件块的合并操作,直至得到最终的合并文件。
可理解的,若目标文件夹内存储的文件数量和文件总块数相同,则执行多线程并行合并,具体包括:设置用于存储第一文件块的第一文件路径和用于存储第一文件块的合并文件的第二文件路径,其中,第一文件路径可以理解为初始旧文件路径,第二文件路径可以理解为初始新文件路径;设置初始最大并行线程数,随后计算文件总块数和预设并行线程数的比例得到第一数值和第二数值,其中,第一数值是文件总块数和预设并行线程数相除的商,第二数值是文件总块数和预设并行线程相除的余数;判断第一数值是否大于第一预设阈值,优选的,第一预设阈值为2,若第一数值小于第一预设阈值,则判断预设并行线程数是否等于第二预设阈值,优选的,第二预设阈值为1,在预设并行线程数不等于第二预设阈值的情况下,根据第二预设阈值更新文件总块数以重新计算第一数值;若第一数值大于第一预设阈值,则判断第二数值是否等于第三预设阈值,优选的,第三预设阈值为0,在预设并行线程数等于第二预设阈值的情况下,或者,在第二数值等于第三预设阈值的情况下,计算各第一线程需要合并的文件块数,例如,直接将第一数值作为各第一线程需要合并的文件块数;若第二数值不等于第三预设阈值,则计算各第一线程需要合并的文件块数,例如,将第一数值作为多个第一线程中第一个第一线程到第一数值个第一线程的前一个第一线程需要合并的文件块数,也就是第一个第一线程和倒数第二个第一线程需要合并的文件块数相同,都是第一数值,将第一数值和第二数值的和值作为第一数值个第一线程需要合并的文件块数,也就是将第一数值和第二数值的和值作为最后一个(倒数第一个)第一线程需要合并的文件块数。
可选的,上述根据所述每个第一线程需要合并的文件块数,执行文件块的合并操作,直至得到最终的合并文件,具体通过如下步骤实现:
根据所述每个第一线程需要合并的文件块数,计算每个第一文件块在所述待传输文件中的起止位置,以使所述每个第一线程按照所述起止位置合并所述文件块数个第一文件块并将生成的第二文件块存储至所述第二文件路径;统计所述第二文件路径中存储的所有第二文件块的文件数量,得到第一数量;判断所述第一数量是否等于第四预设阈值,若所述第一数量等于所述第四预设阈值,则读取所述第二文件块并进行解码,生成最终的合并文件;或者,若所述第一数量不等于所述第四预设阈值,则设置用于存储所述第二文件块的合并文件的第三文件路径;利用所述每个第一线程执行所述第二文件块的文件合并以将生成的第三文件块存储至所述第三文件路径;统计所述第三文件路径中存储所有第三文件块的文件数量,得到第二数量;若所述第二数量等于所述第四预设阈值,则读取所述第三文件块并进行解码,生成最终的合并文件。
可理解的,确定每个第一线程需要处理的文件块数后,根据每个第一线程需要合并的文件块数,计算每个第一文件块在待传输文件中的起止位置,并为每个第一文件块分配对应的第一线程的编号,每个第一线程按照起止位置合并文件块数个第一文件块并将生成的第二文件块存储至第二文件路径,例如,线程1需要合并3个文件块,线程1按照3个文件块的起止位置进行合并,生成1个第二文件块,其中,第二文件块的名称可以根据文件编号和线程编号确定,将第一文件路径中合并前的所有文件块删除;同一批次执行并行线程的各第一线程结束文件合并后,统计第二文件路径中存储的所有第二文件块的文件数量,得到第一数量,并将第二文件路径作为待合并文件块的存储路径,同时按照时间戳命名新的用于存储合并后的文件的路径,记为第三文件路径;随后,判断第一数量是否等于第四预设阈值,优选的,第四预设阈值为1,也就是判断是否完成文件块的合并得到一个完整文件,若第一数量等于第四预设阈值,也就是说第二文件块是的唯一的完整合并文件,第一次多线程文件块合并得到了唯一的完整合并文件,文件块合并已经完成,读取第二文件块并进行解码,生成最终的合并文件;或者,若第一数量不等于第四预设阈值,也就是第一次多线程文件块合并没有得到唯一的完整合并文件,则继续执行第二次多线程文件块合并,具体的:设置用于存储第二文件块的合并文件的第三文件路径,利用每个第一线程执行第二文件块的文件合并以将生成的第三文件块存储至第三文件路径;第三文件路径中存储所有第三文件块的文件数量,得到第二数量;若第二数量等于第四预设阈值,也就是第二次多线程文件块合并得到了唯一的完整合并文件,则读取第三文件块并进行解码,生成最终的合并文件,以此类推,进行多次多线程文件块合并以得到唯一的完整合并文件。
示例性的,参见图3b,图3b为本公开实施例提供的一种后端文件合并上传的流程示意图,在进行文件合并的情况下,获取文件编号(filemd5)、文件总块数(分块数chunks)、文件总大小(filesize)和文件名(filename),判断是否存储有编号为filemd5的文件夹,若否则返回报错信息,若是则判断文件夹内文件个数是否等于分块数,若否则返回报错信息,若是则执行多线程并行合并;设置初始旧chunks文件路径,记为chunks-path-old,设置初始新chunks文件路径,记为chunks-path-new,设置初始最大并行线程数,记为threads;判断chunks/threads是否大于2,若是则判断chunks%threads是否等于0,若否则判断threads是否等于1,若threads不等于1,则重新计算最大并行线程数,将threads=threads-1作为最大并行线程数,继续判断,若threads等于1,或者,若chunks%threads等于0,则将各线程需要合并的文件块个数设置为chunks/threads;若chunks%threads不等于0,将第1到第int(chunks/threads)-1个线程要合并的文件块个数设置为chunks/threads,将第int(chunks/threads)个线程要合并的文件块个数设置为chunks/threads+chunks%threads;随后,计算各线程处理的分块起止编号(start,end),并为各文件块分配线程编号i,各线程分别按照起止位置合并文件块,具体的,将各线程合并后的内容写入新文件,文件名为str(filemd5)+str(i),将合并后的文件存入chunks-path-new,删除chunks-path-old文件夹内合并前的文件;并行线程后结束,重新计算合并后的文件数chunks,将chunks-path-new作为chunks-path-old,按照时间戳命名新的文件路径作为chunks-path-new;判断chunks是否等于1,若是,则读取chunks-path-new文件夹内的文件内容,并进行b64decode解码以生成最终的合并文件,若否则继续执行并行线程,继续判断chunks/threads是否大于2,进行循环迭代。
本公开实施例提供的一种文件传输方法,后端针对各线程下载文件块分片传输,能够提升各线程文件块下载速度。后端通过文件分块缓存至文件夹代替传统缓存至内存办法,解决了传统缓存至内存可能出现的key数量限制,key存储时长限制,value存储长度限制所导致的大文件上传时文件块丢失问题。后端通过迭代多线程并行处理技术,实现文件块合并时多线程并行化处理,提升文件合并速度。
在上述实施例的基础上,参见图4,图4为本公开实施例提供的一种用于前端的文件传输方法的流程示意图,应用于前端,所述前端包括可并行执行的多个第二线程,具体包括如图4所示的步骤S410至S440:
可理解的,浏览器使用asyncpool构建文件多线程并行下载前端功能,下载前端功能用于实现文件下载过程的前端多线程并行化,提升前端(b端)的计算性能占用率,提升服务端(s端)计算性能占用率,提升网络带宽利用率,提升下载速度;浏览器使用asyncpool构建文件多线程并行上传前端功能,上传前端功能用于实现文件上传过程的前端多线程并行化,提升b端计算性能占用率,提升s端计算性能占用率,提升网络带宽利用率,提升大文件上传稳定性。其中,前端包括下载前端功能和上传前端功能。
S410、获取待传输文件,并设置所述待传输文件的传输信息。
其中,所述传输信息包括并行线程数量和每个第二线程可传输的文件大小。
可理解的,获取待传输文件,具体包括待传输文件的大小、文件名和文件类型等,设置每个第二线程可以传输的文件大小和最大并行线程数量(poolLimit)。
S420、根据所述待传输文件的大小和所述每个第二线程可传输的文件大小,计算所述前端需要启动的线程总数。
可理解的,在上述S410的基础上,计算待传输文件的大小和每个第二线程可传输的文件大小的比值,得到前端需要启动的并行线程总数(Chunks),也就是确定每次启动的第二线程的数量。
S430、根据所述每个第二线程可传输的文件大小和所述线程总数对所述待传输文件进行分块计算,确定所述每个第二线程需要传输的第一文件块。
可理解的,在上述S420的基础上,根据每个第二线程可传输的文件大小和启动的第二线程的线程总数对待传输文件进行分块计算,确定每个第二线程所需要传输的第一文件块,例如,待传输文件为100兆,每个第二线程可传输的文件大小为1兆,可以将待传输文件划分为100个第一文件块,也就是需要启动的线程总数为100,若最大并行线程数量为10,也就是每次可以并行启动10个第二线程,每个第二线程都需要传输10个第一文件块,执行10次并发线程即可完成待传输文件的完整传输。
S440、启动所述并行线程数量个第二线程以将所述第一文件块发送至后端。
其中,所述后端用于利用可并行执行的多个第一线程根据预设分块大小和所述第一文件块的传输信息进行所述第一文件块的迭代下载。
可理解的,在上述S430的基础上,若前端的传输方式是前端上传文件,则使用asyncPool启动多线程,执行并发线程,通过各第二线程将划分的第一文件块发送至后端,直至设置的最大并行线程数量poolLimit大于或等于计算的并行线程数量Chunks,也就是进行最后一次并行传输,完成待传输文件的上传。若设置的最大并行线程数量小于计算的并行线程数量,则继续执行并发控制。
可选的,上述S440中启动所述并行线程数量个第二线程以将所述第一文件块发送至后端,具体通过如下步骤实现:
确定所述待传输文件的传输方式;若所述传输方式是所述前端向所述后端发送文件,则启动所述并行线程数量个第二线程并执行并发线程,以使所述每个第二线程计算对应的第一文件块在所述待传输文件中的起始位置,并按照所述起始位置向所述后端发送所述第一文件块。
可理解的,若传输方式是前端向后端发送文件,则计算每个第二线程需要下载的第一文件块在待传输文件中的起始位置,启动并行线程数量个第二线程并执行并发线程,以使每个第二线程计算对应的第一文件块在待传输文件中的起始位置,具体可以按照每个第二线程的编号顺序为一次确定每个第二线程要传输的第一文件块在待传输文件中的起止位置,例如,在上述示例的基础上,将待传输文件划分为100个第一文件块后,按照10个第二线程的编号顺序,例如,1-10的编号顺序,将前10个第一文件块依次确定为10个第二线程需要传输的文件块,第一个第一文件块由编号1的线程传输,并在待传输文件块中计算出各文件块的起止位置,依次类推,为每个第二线程确定需要传输的10个第一文件块的起止位置。随后,并行的每个第二线程按照起止位置读取第一文件块并向后端发送第一文件块。
示例性的,参见图5,图5为本公开实施例提供的一种前端上传文件的流程示意图,文件多线程并行上传前端处理算法:计算待传输文件的大小(Filesize)和待传输文件的md5编号(Filemd5);设置各线程上传文件块大小(Filechunk);计算并行线程数,Chunks=Filesize/ Filechunk;设置最大并行线程数(poolLimit);使用asyncPool启动多线程,执行并发线程,执行并发线程的过程包括:获取当前线程编号i,将待传输文件划分为多各文件块后,获取当前文件块编号,Chunkmd5=Str(Filemd5)+str(i),设置文件块分片起止位置(Start,end),获取当前线程要传输的文件块chunk,调用后端接口上传该文件块;判断poolLimit是否小于Chunks,若是,则执行并发控制,若否,则结束文件传输。其中,文件md5编号是待上传文件的唯一编码。
可选的,确定所述待传输文件的传输方式后,所述方法还包括:
若所述传输方式是所述前端从后端下载文件,则计算所述每个第二线程需要下载的第一文件块在所述待传输文件中的起始位置;启动所述并行线程数量个第二线程执行并发线程,以使所述每个第二线程按照所述起始位置从所述后端下载对应的第一文件块并存储;更新所述线程总数得到待执行线程数量,若所述并行线程数量小于所述待执行线程数量,则继续执行并发线程。
可理解的,若传输方式是前端从后端下载文件,则计算每个第二线程需要下载的第一文件块在待传输文件中的起止位置,具体计算方式参见上述实施例,在此不作赘述。随后启动计算的并行数量个第二线程执行并发程序,利用第二线程按照起止位置从后端下载对应的第一文件块并存储,也就是说每个第二线程下载的文件块不同。每执行完一次并行线程,就更新线程总数重新确定待执行线程数量,也就是随之减少执行并发线程的执行次数,若并行线程数量小于待执行线程数量,则继续执行并发线程。
示例性的,参见图6,图6为本公开实施例提供的一种前端下载文件的流程示意图,文件多线程并行下载前端处理算法:调用后端接口获取文件大小(filesize)、文件名(filename)和文件类型(filemine);设置各线程下载的文件大小(chunksize)和最大并行线程数(poolLimit);计算需启动线程总数,Chunks=filesize/chunksize;根据线程总数和各线程下载的文件大小计算每个线程所需要下载的文件块以及该文件块在文件中的起止位置(Start,end),并为每个文件块添加有顺序的线程编号i;根据最大并行线程数、起止位置和线程编号使用asyncPool启动多线程,并执行并发线程,其中执行并发线程包括:设置range参数,调用后端接口按照起止位置下载文件块,并将文件块转化为unit8array格式;并发线程执行完成后,判断poolLimit是否小于Chunks,若是,则执行并发控制,若否,则结束全部线程。
本公开实施例提供了一种文件传输方法,前端通过asyncpool实现文件下载前端多线程并行化,能够提升b端计算性能占用率,提升服务器端计算性能占用率,提升网络带宽利用率,提升文件下载速度。同时,前端通过asyncpool实现文件上传前端多线程并行,能够提升b端计算性能占用率,提升服务器端计算性能占用率,提升网络带宽利用率,提升文件上传速度。
图7为本公开实施例提供的一种文件传输装置的结构示意图。本公开实施例提供的文件传输装置可以执行上述文件传输方法实施例提供的处理流程,如图7所示,文件传输装置700包括第一获取单元710、第一确定单元720和下载单元730,其中:
第一获取单元710,用于获取待传输文件的传输请求;
第一确定单元720,用于若所述传输请求是由前端包括的可并行执行的多个第二线程发送的,则确定所述待传输文件的传输方式为所述后端从所述前端下载文件,其中,所述传输请求包括第一文件块的传输信息,所述第一文件块是所述前端对所述待传输文件进行分块计算得到的;
下载单元730,用于利用所述第一线程根据预设分块大小和所述传输信息进行所述第一文件块的迭代下载,其中,所述第一文件块是所述第二线程从所述前端传输至所述后端的。
可选的,下载单元730用于:
根据预设分片大小确定初始偏移量,若所述预设分片大小小于所述第一文件块的大小,则设置初始迭代次数;
根据所述传输信息、所述初始迭代次数和所述初始偏移量在所述第一文件块中计算需要迭代的目标子文件块的下载起始位置和下载终止位置;
根据所述下载起始位置和所述下载终止位置,从所述第一文件块中读取所述目标子文件块以进行所述目标子文件块的一次迭代下载,并累计所述初始迭代次数。
可选的,装置700中所述传输信息包括第一文件块的大小以及所述第一文件块在所述待传输文件中的上传起始位置和上传终止位置。
可选的,下载单元730用于:
根据所述上传起始位置、所述初始迭代次数和所述初始偏移量计算需要迭代的目标子文件块在所述第一文件块中的下载起始位置;
若所述下载起始位置在所述上传终止位置之前,则根据所述下载起始位置和所述预设分块大小确定目标终止位置;
判断所述目标终止位置是否在所述上传终止位置之后,若否,则将所述目标终止位置作为所述目标子文件块在所述第一文件块中的下载终止位置;若是,则将所述上传终止位置作为所述下载终止位置。
可选的,装置700还用于:
确定所述待传输文件的传输方式为所述后端向所述前端上传文件;
对所述待传输文件进行分块计算,确定所述后端部署的多个第一线程中每个第一线程对应的第一文件块,其中,所述第一线程用于将对应的第一文件块上传至所述前端;
在未检测到文件块合并请求的情况下,利用所述第一线程在执行所述待传输文件的分块上传时将所述第一文件块进行单独的文件缓存,其中,所述文件块合并请求用于指示并行的所述多个第一线程在将对应的所述第一文件块上传时执行文件块的合并操作。
可选的,装置700还用于:
获取所述待传输文件的文件编号、所述第一文件块的分块编号和所述第一文件块的分块数据;
确定名称为所述文件编号的目标文件夹内是否存在名称为所述分块编号的文件,若所述目标文件夹内存在名称为所述分块编号的第一文件,则判断所述第一文件是否有数据;
若所述第一文件中有数据,则判断所述第一文件包括的数据是否和所述分块数据相同,若所述第一文件中没有数据,则将所述分块数据写入所述第一文件;
若所述第一文件包括的数据和所述分块数据相同,则进行下一目标文件块的传输,若所述第一文件包括的数据和所述分块数据不同,则将所述分块数据覆盖写入所述第一文件。
可选的,装置700还用于:
获取所述待传输文件的文件编号、所述第一文件块的文件总块数和所述待传输文件的大小;
确定名称为所述文件编号的目标文件夹内存储的文件数量是否和所述文件总块数相同,若所述目标文件夹内存储的文件数量和所述文件总块数不同,则生成文件块分块不完整的报错信息;若所述目标文件夹内存储的文件数量和所述文件总块数相同,则执行所有第一文件块的多线程并行合并操作,直至得到最终的合并文件。
可选的,装置700还用于:
设置用于存储所述第一文件块的第一文件路径和用于存储所述第一文件块的合并文件的第二文件路径;
根据预设并行线程数和所述文件总块数计算得到第一数值和第二数值;
判断所述第一数值是否大于第一预设阈值,若所述第一数值小于所述第一预设阈值,则在所述预设并行线程数不等于第二预设阈值的情况下,根据所述第二预设阈值更新所述文件总块数以重新计算第一数值;若所述第一数值大于所述第一预设阈值,则判断所述第二数值是否等于第三预设阈值,在所述预设并行线程数等于所述第二预设阈值的情况下,或者,在所述第二数值等于所述第三预设阈值的情况下,直接将所述第一数值作为各线程需要合并的文件块数;若所述第二数值不等于所述第三预设阈值,则将所述第一数值作为所述多个第一线程中第一个第一线程到所述第一数值个第一线程的前一个第一线程需要合并的文件块数,并将所述第一数值和所述第二数值的和值作为所述第一数值个第一线程需要合并的文件块数;
根据所述每个第一线程需要合并的文件块数,执行所述第一文件块的合并操作,直至得到最终的合并文件。
可选的,装置700还用于:
根据所述每个第一线程需要合并的文件块数,计算每个第一文件块在所述待传输文件中的起止位置,以使所述每个第一线程按照所述起止位置合并所述文件块数个第一文件块并将生成的第二文件块存储至所述第二文件路径;
统计所述第二文件路径中存储的所有第二文件块的文件数量,得到第一数量;
判断所述第一数量是否等于第四预设阈值,若所述第一数量等于所述第四预设阈值,则读取所述第二文件块并进行解码,生成最终的合并文件;或者,
若所述第一数量不等于所述第四预设阈值,则设置用于存储所述第二文件块的合并文件的第三文件路径;利用所述每个第一线程执行所述第二文件块的文件合并以将生成的第三文件块存储至所述第三文件路径;统计所述第三文件路径中存储所有第三文件块的文件数量,得到第二数量;若所述第二数量等于所述第四预设阈值,则读取所述第三文件块并进行解码,生成最终的合并文件。
图7所示实施例的文件传输装置可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图8为本公开实施例提供的另一种文件传输装置的结构示意图。本公开实施例提供的文件传输装置可以执行上述文件传输方法实施例提供的处理流程,如图8所示,文件传输装置800包括第二获取单元810、计算单元820、第二确定单元830和发送单元840,其中:
第二获取单元810,用于获取待传输文件,并设置所述待传输文件的传输信息,所述传输信息包括并行线程数量和每个第二线程可传输的文件大小;
计算单元820,用于根据所述待传输文件的大小和所述每个第二线程可传输的文件大小,计算所述前端需要启动的线程总数;
第二确定单元830,用于根据所述每个第二线程可传输的文件大小和所述线程总数对所述待传输文件进行分块计算,确定所述每个第二线程需要传输的第一文件块;
发送单元840,用于启动所述并行线程数量个第二线程以将所述第一文件块发送至后端,所述后端用于利用可并行执行的多个第一线程根据预设分块大小和所述第一文件块的传输信息进行所述第一文件块的迭代下载。
可选的,发送单元840用于:
确定所述待传输文件的传输方式;
若所述传输方式是所述前端向所述后端发送文件,则启动所述并行线程数量个第二线程并执行并发线程,以使所述每个第二线程计算对应的第一文件块在所述待传输文件中的起始位置,并按照所述起始位置向所述后端发送所述第一文件块。
可选的,装置800还用于:
若所述传输方式是所述前端从后端下载文件,则计算所述每个第二线程需要下载的第一文件块在所述待传输文件中的起始位置;
启动所述并行线程数量个第二线程执行并发线程,以使所述每个第二线程按照所述起始位置从所述后端下载对应的第一文件块并存储;
更新所述线程总数得到待执行线程数量,若所述并行线程数量小于所述待执行线程数量,则继续执行并发线程。
图8所示实施例的文件传输装置可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图9为本公开实施例提供的电子设备的结构示意图。下面具体参考图9,其示出了适于用来实现本公开实施例中的电子设备900的结构示意图。本公开实施例中的电子设备900可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)、可穿戴电子设备等等的移动终端以及诸如数字TV、台式计算机、智能家居设备等等的固定终端。图9示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图9所示,电子设备900可以包括处理装置(例如中央处理器、图形处理器等)901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储装置908加载到随机访问存储器(RAM)903中的程序而执行各种适当的动作和处理以实现如本公开所述的实施例的文件传输方法。在RAM 903中,还存储有电子设备900操作所需的各种程序和数据。处理装置901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
通常,以下装置可以连接至I/O接口905:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置906;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置907;包括例如磁带、硬盘等的存储装置908;以及通信装置909。通信装置909可以允许电子设备900与其他设备进行无线或有线通信以交换数据。虽然图9示出了具有各种装置的电子设备900,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码,从而实现如上所述的文件传输方法。在这样的实施例中,该计算机程序可以通过通信装置909从网络上被下载和安装,或者从存储装置908被安装,或者从ROM 902被安装。在该计算机程序被处理装置901执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(HyperText TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
可选的,当上述一个或者多个程序被该电子设备执行时,该电子设备还可以执行上述实施例所述的其他步骤。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者网关不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者网关所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者网关中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (13)

1.一种文件传输方法,其特征在于,应用于后端,所述后端包括可并行执行的多个第一线程,所述方法包括:
获取待传输文件的传输请求;
若所述传输请求是由前端包括的可并行执行的多个第二线程发送的,则确定所述待传输文件的传输方式为所述后端从所述前端下载文件,其中,所述传输请求包括第一文件块的传输信息,所述第一文件块是所述前端对所述待传输文件进行分块计算得到的;
利用所述第一线程根据预设分块大小和所述传输信息进行所述第一文件块的迭代下载,其中,所述第一文件块是所述第二线程从所述前端传输至所述后端的。
2.根据权利要求1所述的方法,其特征在于,所述根据预设分块大小和所述传输信息进行所述第一文件块的迭代下载,包括:
根据预设分片大小确定初始偏移量,若所述预设分片大小小于所述第一文件块的大小,则设置初始迭代次数;
根据所述传输信息、所述初始迭代次数和所述初始偏移量在所述第一文件块中计算需要迭代的目标子文件块的下载起始位置和下载终止位置;
根据所述下载起始位置和所述下载终止位置,从所述第一文件块中读取所述目标子文件块以进行所述目标子文件块的一次迭代下载,并累计所述初始迭代次数。
3.根据权利要求2所述的方法,其特征在于,所述传输信息包括第一文件块的大小以及所述第一文件块在所述待传输文件中的上传起始位置和上传终止位置,所述根据所述传输信息、所述初始迭代次数和所述初始偏移量在所述第一文件块中计算需要迭代的目标子文件块的下载起始位置和下载终止位置,包括:
根据所述上传起始位置、所述初始迭代次数和所述初始偏移量计算需要迭代的目标子文件块在所述第一文件块中的下载起始位置;
若所述下载起始位置在所述上传终止位置之前,则根据所述下载起始位置和所述预设分块大小确定目标终止位置;
判断所述目标终止位置是否在所述上传终止位置之后,若否,则将所述目标终止位置作为所述目标子文件块在所述第一文件块中的下载终止位置;若是,则将所述上传终止位置作为所述下载终止位置。
4.根据权利要求1所述的方法,其特征在于,所述获取待传输文件的传输请求后,若所述传输请求是由所述后端触发的,所述方法还包括:
确定所述待传输文件的传输方式为所述后端向所述前端上传文件;
对所述待传输文件进行分块计算,确定所述后端部署的多个第一线程中每个第一线程对应的第一文件块,其中,所述第一线程用于将对应的第一文件块上传至所述前端;
在未检测到文件块合并请求的情况下,利用所述第一线程在执行所述待传输文件的分块上传时将所述第一文件块进行单独的文件缓存,其中,所述文件块合并请求用于指示并行的所述多个第一线程在将对应的所述第一文件块上传时执行文件块的合并操作。
5.根据权利要求4所述的方法,其特征在于,将所述第一文件块进行单独的文件缓存,包括:
获取所述待传输文件的文件编号、所述第一文件块的分块编号和所述第一文件块的分块数据;
确定名称为所述文件编号的目标文件夹内是否存在名称为所述分块编号的文件,若所述目标文件夹内存在名称为所述分块编号的第一文件,则判断所述第一文件是否有数据;
若所述第一文件中有数据,则判断所述第一文件包括的数据是否和所述分块数据相同,若所述第一文件中没有数据,则将所述分块数据写入所述第一文件;
若所述第一文件包括的数据和所述分块数据相同,则进行下一目标文件块的传输,若所述第一文件包括的数据和所述分块数据不同,则将所述分块数据覆盖写入所述第一文件。
6.根据权利要求4所述的方法,其特征在于,在检测到所述文件块合并请求的情况下,所述方法还包括:
获取所述待传输文件的文件编号、所述第一文件块的文件总块数和所述待传输文件的大小;
确定名称为所述文件编号的目标文件夹内存储的文件数量是否和所述文件总块数相同,若所述目标文件夹内存储的文件数量和所述文件总块数不同,则生成文件块分块不完整的报错信息;若所述目标文件夹内存储的文件数量和所述文件总块数相同,则执行所有第一文件块的多线程并行合并操作,直至得到最终的合并文件。
7.根据权利要求6所述的方法,其特征在于,所述执行所有第一文件块的多线程并行合并操作,直至得到最终的合并文件,包括:
设置用于存储所述第一文件块的第一文件路径和用于存储所述第一文件块的合并文件的第二文件路径;
根据预设并行线程数和所述文件总块数计算得到第一数值和第二数值;
判断所述第一数值是否大于第一预设阈值,若所述第一数值小于所述第一预设阈值,则在所述预设并行线程数不等于第二预设阈值的情况下,根据所述第二预设阈值更新所述文件总块数以重新计算第一数值;若所述第一数值大于所述第一预设阈值,则判断所述第二数值是否等于第三预设阈值,在所述预设并行线程数等于所述第二预设阈值的情况下,或者,在所述第二数值等于所述第三预设阈值的情况下,直接将所述第一数值作为各线程需要合并的文件块数;若所述第二数值不等于所述第三预设阈值,则将所述第一数值作为所述多个第一线程中第一个第一线程到所述第一数值个第一线程的前一个第一线程需要合并的文件块数,并将所述第一数值和所述第二数值的和值作为所述第一数值个第一线程需要合并的文件块数;
根据所述每个第一线程需要合并的文件块数,执行所述第一文件块的合并操作,直至得到最终的合并文件。
8.根据权利要求7所述的方法,其特征在于,所述根据所述每个第一线程需要合并的文件块数,执行文件块的合并操作,直至得到最终的合并文件,包括:
根据所述每个第一线程需要合并的文件块数,计算每个第一文件块在所述待传输文件中的起止位置,以使所述每个第一线程按照所述起止位置合并所述文件块数个第一文件块并将生成的第二文件块存储至所述第二文件路径;
统计所述第二文件路径中存储的所有第二文件块的文件数量,得到第一数量;
判断所述第一数量是否等于第四预设阈值,若所述第一数量等于所述第四预设阈值,则读取所述第二文件块并进行解码,生成最终的合并文件;或者,
若所述第一数量不等于所述第四预设阈值,则设置用于存储所述第二文件块的合并文件的第三文件路径;利用所述每个第一线程执行所述第二文件块的文件合并以将生成的第三文件块存储至所述第三文件路径;统计所述第三文件路径中存储所有第三文件块的文件数量,得到第二数量;若所述第二数量等于所述第四预设阈值,则读取所述第三文件块并进行解码,生成最终的合并文件。
9.一种文件传输方法,其特征在于,应用于前端,所述前端包括可并行执行的多个第二线程,所述方法包括:
获取待传输文件,并设置所述待传输文件的传输信息,所述传输信息包括并行线程数量和每个第二线程可传输的文件大小;
根据所述待传输文件的大小和所述每个第二线程可传输的文件大小,计算所述前端需要启动的线程总数;
根据所述每个第二线程可传输的文件大小和所述线程总数对所述待传输文件进行分块计算,确定所述每个第二线程需要传输的第一文件块;
启动所述并行线程数量个第二线程以将所述第一文件块发送至后端,所述后端用于利用可并行执行的多个第一线程根据预设分块大小和所述第一文件块的传输信息进行所述第一文件块的迭代下载。
10.根据权利要求9所述的方法,其特征在于,所述启动所述并行线程数量个第二线程以将所述第一文件块发送至后端,包括:
确定所述待传输文件的传输方式;
若所述传输方式是所述前端向所述后端发送文件,则启动所述并行线程数量个第二线程并执行并发线程,以使所述每个第二线程计算对应的第一文件块在所述待传输文件中的起始位置,并按照所述起始位置向所述后端发送所述第一文件块。
11.根据权利要求10所述的方法,其特征在于,所述确定所述待传输文件的传输方式后,所述方法还包括:
若所述传输方式是所述前端从后端下载文件,则计算所述每个第二线程需要下载的第一文件块在所述待传输文件中的起始位置;
启动所述并行线程数量个第二线程执行并发线程,以使所述每个第二线程按照所述起始位置从所述后端下载对应的第一文件块并存储;
更新所述线程总数得到待执行线程数量,若所述并行线程数量小于所述待执行线程数量,则继续执行并发线程。
12.一种文件传输装置,其特征在于,应用于后端,所述后端包括可并行执行的多个第一线程,所述装置包括:
第一获取单元,用于获取待传输文件的传输请求;
第一确定单元,用于若所述传输请求是由前端包括的可并行执行的多个第二线程发送的,则确定所述待传输文件的传输方式为所述后端从所述前端下载文件,其中,所述传输请求包括第一文件块的传输信息,所述第一文件块是所述前端对所述待传输文件进行分块计算得到的;
下载单元,用于利用所述第一线程根据预设分块大小和所述传输信息进行所述第一文件块的迭代下载,其中,所述第一文件块是所述第二线程从所述前端传输至所述后端的。
13.一种文件传输装置,其特征在于,应用于前端,所述前端包括可并行执行的多个第二线程,所述装置包括:
第二获取单元,用于获取待传输文件,并设置所述待传输文件的传输信息,所述传输信息包括并行线程数量和每个第二线程可传输的文件大小;
计算单元,用于根据所述待传输文件的大小和所述每个第二线程可传输的文件大小,计算所述前端需要启动的线程总数;
第二确定单元,用于根据所述每个第二线程可传输的文件大小和所述线程总数对所述待传输文件进行分块计算,确定所述每个第二线程需要传输的第一文件块;
发送单元,用于启动所述并行线程数量个第二线程以将所述第一文件块发送至后端,所述后端用于利用可并行执行的多个第一线程根据预设分块大小和所述第一文件块的传输信息进行所述第一文件块的迭代下载。
CN202311422824.3A 2023-10-31 2023-10-31 一种文件传输方法和装置 Active CN117155922B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311422824.3A CN117155922B (zh) 2023-10-31 2023-10-31 一种文件传输方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311422824.3A CN117155922B (zh) 2023-10-31 2023-10-31 一种文件传输方法和装置

Publications (2)

Publication Number Publication Date
CN117155922A true CN117155922A (zh) 2023-12-01
CN117155922B CN117155922B (zh) 2024-01-30

Family

ID=88901168

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311422824.3A Active CN117155922B (zh) 2023-10-31 2023-10-31 一种文件传输方法和装置

Country Status (1)

Country Link
CN (1) CN117155922B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103312732A (zh) * 2012-03-07 2013-09-18 腾讯科技(深圳)有限公司 数据文件的传输方法及装置
CN110493342A (zh) * 2019-08-21 2019-11-22 北京明朝万达科技股份有限公司 文件传输方法、装置、电子设备及可读存储介质
CN111586094A (zh) * 2020-03-26 2020-08-25 平安养老保险股份有限公司 一种文件上传方法、装置及计算机设备
CN112995329A (zh) * 2021-03-22 2021-06-18 洪璐 一种传输文件方法及系统
CN113824760A (zh) * 2021-08-03 2021-12-21 中债金科信息技术有限公司 文件并发分块上传方法、装置、电子设备及存储介质
CN115086298A (zh) * 2022-05-30 2022-09-20 中银金融科技有限公司 文件传输方法及装置
CN115987972A (zh) * 2022-12-29 2023-04-18 湖北天融信网络安全技术有限公司 文件传输方法、装置、电子设备及计算机可读存储介质
CN116527653A (zh) * 2023-04-13 2023-08-01 北斗星通智联科技有限责任公司 文件下载方法、装置、计算机设备及存储介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103312732A (zh) * 2012-03-07 2013-09-18 腾讯科技(深圳)有限公司 数据文件的传输方法及装置
CN110493342A (zh) * 2019-08-21 2019-11-22 北京明朝万达科技股份有限公司 文件传输方法、装置、电子设备及可读存储介质
CN111586094A (zh) * 2020-03-26 2020-08-25 平安养老保险股份有限公司 一种文件上传方法、装置及计算机设备
CN112995329A (zh) * 2021-03-22 2021-06-18 洪璐 一种传输文件方法及系统
CN113824760A (zh) * 2021-08-03 2021-12-21 中债金科信息技术有限公司 文件并发分块上传方法、装置、电子设备及存储介质
CN115086298A (zh) * 2022-05-30 2022-09-20 中银金融科技有限公司 文件传输方法及装置
CN115987972A (zh) * 2022-12-29 2023-04-18 湖北天融信网络安全技术有限公司 文件传输方法、装置、电子设备及计算机可读存储介质
CN116527653A (zh) * 2023-04-13 2023-08-01 北斗星通智联科技有限责任公司 文件下载方法、装置、计算机设备及存储介质

Also Published As

Publication number Publication date
CN117155922B (zh) 2024-01-30

Similar Documents

Publication Publication Date Title
US9552382B2 (en) Reference counter integrity checking
CN110347651B (zh) 基于云存储的数据同步方法、装置、设备及存储介质
CN109508326B (zh) 用于处理数据的方法、装置和系统
CN112015816A (zh) 数据同步方法、装置、介质及电子设备
CN112286706B (zh) 安卓应用的应用信息远程快速获取方法及相关设备
CN117155922B (zh) 一种文件传输方法和装置
CN110888773B (zh) 一种获取线程标识的方法、装置、介质和电子设备
CN111309366B (zh) 一种管理注册核心的方法、装置、介质和电子设备
CN110505289B (zh) 文件下载方法及装置、计算机可读介质、无线通信设备
CN114402286A (zh) 一种文件处理方法、文件处理装置及终端设备
CN111273939A (zh) 信息处理方法、信息处理装置及终端设备
CN110968334B (zh) 应用资源更新方法、资源包制作方法、装置、介质及设备
CN110727889A (zh) 一种静态网页资源的加载方法、装置、介质及电子设备
US11366613B2 (en) Method and apparatus for writing data
CN113742376A (zh) 一种同步数据的方法、第一服务器以及同步数据的系统
CN111831655B (zh) 一种数据处理的方法、装置、介质和电子设备
CN116361254B (zh) 图像存储方法、装置、电子设备和计算机可读介质
CN111092929B (zh) 文件下发方法、装置及电子设备
CN111209042B (zh) 一种建立函数栈的方法、装置、介质和电子设备
CN115495026B (zh) 一种优化内存处理方法、装置、设备及存储介质
US12019652B2 (en) Method and device for synchronizing node data
US10657091B2 (en) Speculative execution in a distributed streaming system
CN116450235A (zh) 应用数据生成方法、装置、应用数据加载方法和装置
CN115906603A (zh) 机器学习模型的训练方法及装置
CN116643702A (zh) 分布式文件处理方法、装置、设备及介质

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
GR01 Patent grant