一种基于浏览器的文件传输方法及装置与流程

文档序号:16900664发布日期:2019-02-19 17:57阅读:229来源:国知局
一种基于浏览器的文件传输方法及装置与流程

本发明涉及互联网领域的文件传输技术,具体涉及一种基于浏览器的文件传输方法及装置。



背景技术:

随着网络的普及以及业务复杂性的提高,传输文件的需求也变得越来越常见且重要,即使核电工业对文件交互系统的要求也越来越高。然而基于安全的考虑,实际应用于核电工业的计算机不论硬件还是软件的更新都比较缓慢,而在不同时期又会添置和更新计算机设备及软件。这样文件传输的环境就越来越复杂,也越来越困难,尤其是大文件的传输。万维网或局域网基本都通过浏览器传输文件,浏览器是指可以显示网页服务器或者文件系统的html文件(标准通用标记语言的一个应用)内容,并让用户与这些文件交互的一种软件。它用来显示在万维网或局域网等内的文字、图像及其他信息。这些文字或图像,可以是连接其他网址的超链接,用户可迅速及轻易地浏览各种信息。大部分网页为html格式。一个网页中可以包括多个文档,每个文档都是分别从服务器获取的。大部分的浏览器本身支持除了html之外的广泛的格式,例如jpeg、png、gif等图像格式,并且能够扩展支持众多的插件(plug-ins)。另外,许多浏览器还支持其他的url类型及其相应的协议,如ftp、gopher、https(http协议的加密版本)。国内的计算机上常见的网页浏览器有,qq浏览器、internetexplorer、firefox、safari,opera、googlechrome、百度浏览器、搜狗浏览器、猎豹浏览器、360浏览器、uc浏览器、傲游浏览器、世界之窗浏览器等,浏览器是最经常使用到的客户端程序。但是浏览器传输文件时,要保证文件传输过程的连续性。当被传输的文件比较大或网络状态不稳定时,就会经常出现文件传输失败的情况发生。传输失败后就只能重新进行文件的传输,不但影响文件传输的效率,也会增加文件传输遗漏情况的发生。例如,文件上传了,突然被中断或失去响应,就是导致传输失败。如果传输失败的消息被忽略就会以为已经上传完文件了的情况发生。因此迫切需要一种可以应用浏览器进行大文件传输的方法,来解决文件传输失败后,需重新开始传输的问题。



技术实现要素:

本申请提供一种基于浏览器的文件传输方法及装置,以解决现有技术中浏览器传输大文件失败后需重新开始传输的问题。

根据第一方面,一种实施例中提供一种基于浏览器的文件传输方法,包括:

响应于用户发送文件传输请求,浏览器获取用户需要传输的目标文件;

浏览器将所述目标文件进行分片化,得到所述目标文件的若干个分片;

浏览器向服务器验证所述目标文件的所有分片;

对于任一分片,若浏览器验证服务器已存在该分片,则将该分片标记为已传输,反之,若浏览器验证服务器不存在该分片,则将该分片标记为未传输;

浏览器向服务器传输标记为未传输的分片,以使得服务器将目标文件已存在的分片与本次接收到的分片融合为完整的目标文件。

进一步,所述浏览器获取用户需要传输的目标文件包括:

若浏览器是ie浏览器,则通过html5技术来上传所述目标文件;

若浏览器不是ie浏览器,则通过flash技术来上传所述目标文件。

进一步,所述浏览器获取用户需要传输的目标文件包括:

所述浏览器调用webworker接口获取用户需要传输的目标文件。

进一步,所述浏览器将所述目标文件进行分片化包括:

基于javascript技术对所述目标文件进行分片。所述分片的默认大小为5m。

进一步,所述浏览器向服务器验证所述目标文件的所有分片包括:

计算各分片的md5值;

根据各分片的md5值向服务器验证服务器中是否存在该分片。

进一步,浏览器向服务器传输标记为未传输的分片,以使得服务器将目标文件已存在的分片与本次接收到的分片融合为完整的目标文件包括:

浏览器向服务器传输标记为未传输的分片,以使得服务器采用定位读写的方式将目标文件已存在的分片与本次接收到的分片融合为完整的目标文件。

进一步,浏览器向服务器传输标记为未传输的分片,以使得服务器将目标文件已存在的分片与本次接收到的分片融合为完整的目标文件包括:

浏览器向服务器传输所有未标记为未传输的分片后,以使得服务器将所有传输的分片融合为完整的目标文件。

进一步,所述浏览器向服务器传输标记为未传输的分片包括:

所述浏览器应用异步传输技术,同时传输10个分片的方式传输。

根据第二方面,一种实施例中提供一种文件传输装置,包括:

响应单元,用于响应于用户发送文件传输请求,获取用户需要传输的目标文件;将所述目标文件进行分片化,得到所述目标文件的若干个分片;

验证单元,用于向服务器验证所述目标文件的所有分片;对于任一分片,若浏览器验证服务器已存在该分片,则将该分片标记为已传输,反之,若浏览器验证服务器不存在该分片,则将该分片标记为未传输;

发送单元,用于向服务器传输标记为未传输的分片,以使得服务器将目标文件已存在的分片与本次接收到的分片融合为完整的目标文件。

依据上述实施例的基于浏览器的文件传输方法及装置,由于采用浏览器响应用户发送文件传输请求,将目标文件分片,并将每个分片分别传输,最后将分片文件重新整合成被传输文件的方法,解决现有技术中提出的大文件传输失败后,需重新开始传输的问题。

附图说明

图1为一种实施例的文件传输方法的硬件环境的示意图;

图2为一种实施例的文件传输方法的流程图;

图3为一种实施例的文件传输方法的模型架构的示意图;

图4为一种实施例的文件传输方法的模型架构的示意图;

图5为另一种实施例的文件传输系统的流程示意图。

具体实施方式

下面通过具体实施方式结合附图对本发明作进一步详细说明。其中不同实施方式中类似元件采用了相关联的类似的元件标号。在以下的实施方式中,很多细节描述是为了使得本申请能被更好的理解。然而,本领域技术人员可以毫不费力的认识到,其中部分特征在不同情况下是可以省略的,或者可以由其他元件、材料、方法所替代。在某些情况下,本申请相关的一些操作并没有在说明书中显示或者描述,这是为了避免本申请的核心部分被过多的描述所淹没,而对于本领域技术人员而言,详细描述这些相关操作并不是必要的,他们根据说明书中的描述以及本领域的一般技术知识即可完整了解相关操作。

另外,说明书中所描述的特点、操作或者特征可以以任意适当的方式结合形成各种实施方式。同时,方法描述中的各步骤或者动作也可以按照本领域技术人员所能显而易见的方式进行顺序调换或调整。因此,说明书和附图中的各种顺序只是为了清楚描述某一个实施例,并不意味着是必须的顺序,除非另有说明其中某个顺序是必须遵循的。

本文中为部件所编序号本身,例如“第一”、“第二”等,仅用于区分所描述的对象,不具有任何顺序或技术含义。而本申请所说“连接”、“联接”,如无特别说明,均包括直接和间接连接(联接)。

基于浏览器的文件传输多采用ftp协议和http协议进行文件传输,一般大文件传输时都采用ftp协议。ftp是filetransferprotocol(文件传输协议)的英文简称,主要用于互联网或局域网上的控制文件的双向传输。同时,它也是一个应用程序(application),用户可以通过它把自己的pc机与互联网或局域网上所有运行ftp协议的服务器或终端相连,实现文件交互或资源共享。ftp的主要作用是让用户连接上一个远程计算机(该远程计算机上运行着ftp服务器程序)察看远程计算机有那些文件,然后把文件从远程计算机上拷贝到本地计算机,或把本地计算机的文件上传到服务器上。实现ftp传输功能的方法是在网页中内嵌一个能够具有ftp传输功能的控件,该控件是一个将所有的功能都封装到在一起的dll,或者其它格式的控件如ocx。这样虽然可以实现文件的传输,但还具有两个主要的缺点,首先由于控件比较大,这样会导致网页的加载速度变慢;其次,由于ftp传输功能封装在网页的控件上,在文件的传输过程中,当前的网页不允许关闭,以及跳转到其它网页,否则传输就会停止。对于比较大的文件,一般上传或下载的时间都会比较长,其缺点就更加明显。

http协议(hypertexttransferprotocol,超文本传输协议)是用于从www服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。http协议是基于请求/响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是mime信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是mime信息包括服务器信息、实体信息和可能的内容。其实简单说就是任何服务器除了包括html文件以外,还有一个http驻留程序,用于响应用户请求。你的浏览器是http客户,向服务器发送请求,当浏览器中输入了一个开始文件或点击了一个超级链接时,浏览器就向服务器发送了http请求,此请求被送往由ip地址指定的url。驻留程序接收到请求,在进行必要的操作后回送所要求的文件。在这一过程中,在网络上发送和接收的数据已经被分成一个或多个数据包(packet),每个数据包包括要传送的数据和控制信息,即告诉网络怎样处理数据包。tcp/ip决定了每个数据包的格式。

目前,用户通过浏览器上传文件通常采用以下几种方式:

1)通过浏览器fileapi以表单的形式传输给服务器。这种方式能够兼容包括移动端浏览器在内的各种浏览器,但是对于数据量较大的文件会造成服务器接口压力增加,并且如果文件传输中断,则需要重新上传该文件。

2)通过浏览器中安装的flash插件将文件传输给服务器。这种方式可以实现文件的断点续传,但是无法传输数据量较大的文件。

3)通过浏览器中安装ftn插件将文件传输给服务器。这种方式可以实现文件的断点续传,也能够传输数据量较大的文件,需要在浏览器中安装ftn插件,由于有些浏览器或浏览器版本不支持该ftn插件,将会造成无法实现文件传输。

首先,在对本发明实施例中涉及的部分名词或者术语适用于如下解释:

html5:万维网的核心语言、标准通用标记语言下的一个应用超文本标记语言(html)的第五次重大修改。

webworker:html5标准下的一种浏览器主进程的应用接口。

filereader:html5标准下的一种对文件支持流式操作的应用接口。

formdata:html5标准下的一种对表单的扩展实现的应用接口。

flash插件:是指安装于浏览器的flash插件(adobeflashplayerplugin),使浏览器得以播放swf文件。adobeflash(原称macromediaflash,简称flash)

javascript:是一种属于网络的脚本语言,已经被广泛用于web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常javascript脚本是通过嵌入在html中来实现自身的功能的。

webuploader:是由baiduwebfe(fex)团队开发的一个简单的以html5为主,flash为辅的现代文件上传组件。在现代的浏览器里面能充分发挥html5的优势,同时又不摒弃主流ie浏览器。采用大文件分片并发上传,提高了文件上传效率。

哈希值:散列算法(hashfunction,或散列算法,又称哈希函数)是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hashvalues,hashcodes,hashsums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到,javascript内置了hash的支持。md5可以说是目前应用最广泛的hash算法。

md5:是对一段信息(message)产生信息摘要(message-digest),以防止被篡改。比如,在unix下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:

md5(tanajiya.tar.gz)=38b8c2c1093dd0fec383a9d9ac940515

这就是tanajiya.tar.gz文件的数字签名。md5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的md5信息摘要。大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为司法机关鉴别罪犯身份最值得信赖的方法;与之类似,md5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其md5值也就是对应的“数字指纹”都会发生变化。我们常常在某些软件下载站点的某软件信息中看到其md5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如windowsmd5check等)做一次md5校验,以确保我们获得的文件与该站点提供的文件为同一文件。具体来说文件的md5值就像是这个文件的“数字指纹”。每个文件的md5值是不同的,如果任何人对文件做了任何改动,其md5值也就是对应的“数字指纹”就会发生变化。比如下载服务器针对一个文件预先提供一个md5值,用户下载完该文件后,用我这个算法重新计算下载文件的md5值,通过比较这两个值是否相同,就能判断下载的文件是否出错,或者说下载的文件是否被篡改了。

在本发明实施例中,为解决浏览器版传输大文件会失败后,需重新上传的问题,采用浏览器响应用户发送文件传输请求,将目标文件分片,并将每个分片分别传输,最后将分片文件重新整合成被传输文件,进而实现大文件传输的方法。

实施例一:

请参考图1,为一种实施例的文件传输方法的硬件环境的示意图,由服务器102和终端104所构成的硬件环境中,服务器102通过网络与终端104进行连接,上述网络包括但不限于:广域网、城域网或局域网,终端104并不限定于pc、手机、平板电脑或其它移动终端设备。本实施例的文件传输方法可以由服务器102来执行,也可以由终端104来执行,还可以是由服务器102和终端104共同执行。其中,终端104执行本发明实施例的文件传输方法可以由安装在其上的客户端来执行。

请参考图2,为一种实施例的文件传输方法的流程图,该方法可以包括以下步骤:

步骤201,响应于用户发送文件传输请求,浏览器获取用户需要传输的目标文件。

浏览器可以通过用户发送文件传输请求或任一程序主进程的请求向服务器发送文件传输请求,其中,文件传输请求用于指示向服务器传输目标文件,目标文件可以是用户或任一程序主进程通过浏览器获取的。若浏览器是ie浏览器,则通过html5技术来上传所述目标文件。若浏览器不是ie浏览器,则通过flash技术来上传所述目标文件。浏览器具体可以调用webworker接口获取用户需要传输的目标文件。

步骤202,浏览器将所述目标文件进行分片化,得到所述目标文件的若干个分片。

浏览器对目标文件分片化具体可基于javascript技术对所述目标文件进行分片,并计算每个文件分片的md5值。分片的默认大小为5m。

步骤203,浏览器向服务器验证所述目标文件的所有分片。

浏览器根据各分片的md5值向服务器验证服务器中是否存在该分片,具体可以是浏览器将目标文件的所有分片的md5值发送给目标服务器。目标服务器根据md5值判断和统计判断每个分片是否已经存在。具体可以是目标服务器把已经传输完成的分片的md5值与浏览器传输过来的所有md5值进行比较并进行统计。比较方式可以是判断有没有浏览器传输过来的md5值的方法,就可以判断那些分片已经传输完成,那些分片还没有传输。并将统计信息发回给浏览器。浏览器根据统计信息验证每个分片是否已经传输完成。对于任一分片,若浏览器验证服务器已存在该分片,则将该分片标记为已传输,反之,若浏览器验证服务器不存在该分片,则将该分片标记为未传输。

标记的目的是当再一次重新进行文件传输时,浏览器发送验证服务时,就可以只发送标记为未传输的分片md5值,以简化目标服务器验证分片md5值的工作量,以提高工作效率。

步骤204,浏览器向服务器传输标记为未传输的分片,以使得服务器将目标文件已存在的分片与本次接收到的分片融合为完整的目标文件。

浏览器将标记的未传输的分片传输给目标服务器。当所有未传输的分片传输给目标服务器后,目标服务器将目标文件已存在的分片与本次接收到的分片融合为完整的目标文件。目标服务器可采用定位读写的方式将目标文件已存在的分片与本次接收到的分片融合为完整的目标文件。浏览器向服务器传输标记为未传输的分片时应用异步传输技术,同时传输10个分片的方式传输。

需要说明的是,本申请实施例中的浏览器可以为移动终端的浏览器,也可以为非移动终端的浏览器,本申请实施例对其不做具体限定。浏览器可以为具有html5网页页面的任意类型的应用,列入网页版或者客户端版的视频播放器、即使通信应用或浏览器应用等。本发明实施例中的浏览器可以具有主进程,浏览器的主进程可以用于处理用户在浏览器的操作页面上所执行的操作、与浏览器用户进行数据交互、处理用户发起的各种请求、处理注册、回调等事件。浏览器的主进程还可以用于处理其他事件或请求,此处不再一一举例说明。浏览器的应用接口可以为webworker,其中webworker为html5标准下的一种浏览器主进程的应用接口。由于浏览器主进程是单线程执行的,所以在浏览器页面操作过程中,应该尽快避免在ui线程频繁地dom操作以及复杂的数学计算,以达到避免浏览器页面卡顿影响用户体验的目的。本申请实施例可以将文件传输方法的处理流程以及计算过程在浏览器的进程中执行,这样能够减轻浏览器主进程的压力。浏览器的脚本插件javascript是一种属于网络的脚本语言,已经被广泛用于web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常javascript脚本是通过嵌入在html中来实现自身的功能的。javascript是一种解释性脚本语言(代码不进行预编译),主要用来向html(标准通用标记语言下的一个应用)页面添加交互行为。不但可以直接嵌入html页面,还具有跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如windows、linux、mac、android、ios等)。javascript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。javascript提供了四种基本的数据类型和两种特殊数据类型用来处理数据和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。利用javascript插件可以实现对目标文件的预处理操作,例如计算文件的大小,将文件划分为多个文件分片等。

需要说明的是,本申请的实施例中的目标文件可以是任意类型的文件,例如文本、图片、音频或视频文件等,本发明实施例对目标文件的类型不做具体限定。本申请实施例的文件传输方法可以在浏览器中上传目标文件,也即用户可以通过浏览器将目标文件传输至服务器,其中,服务器可以是用于对浏览器进行支持和维护的服务器。此处需要说明的是,本申请实施例的文件传输方法可以将数据量小的目标传输至浏览器,也可以将数据量大的目标文件传输至服务器,最大可以达到8gb,甚至更大。

向服务器传输目标文件的实际应用场景中,在用户选中需要传输的目标文件之后,该目标文件可以首先被上传至浏览器的上传页面中,然后浏览器的主进程可以通过与该上传页面的数据交互获取到该目标文件。浏览器在执行主进程的过程中,获取到该目标文件,并调用浏览器的插件javascript将目标文件划分成多个文件分片,其中每个文件分片的大小可以相同,也可以不同。将目标文件划分成多个文件分片后,可以分别计算多个文件分片中的每个文件分片的哈希值,上述过程为浏览器在向服务器传输目标文件之前对目标文件的预处理的过程。文件分片的哈希值的计算方法可以参考开源的md5、sha1的实现,此处不再一一举例详细说明。

在本实施例提供的技术方案中,浏览器在向服务器传输文件分片之前,可以首先向服务器发送文件传输请求,其中,该文件传输请求可以用于指示向服务器传输目标文件。此处需要说明的是,浏览器对获取到的目标文件进行预处理之后,可以得到目标文件划分的多个文件分片以及多个文件分片中的每个文件分片的哈希值,浏览器在向服务器发送文件传输请求时可以在文件传输请求中携带有以下信息中的至少之一:目标文件的标识信息、目标文件的大小、文件分片的数量、每个文件分片的哈希值、每个文件分片的大小、每个文件分片的标号等信息,文件传输请求中还可以携带有其他信息,此处不再一一举例说明。

在实际应用场景中,浏览器通过主进程向服务器发送文件传输请求可以采用以下方式:文件传输请求可以是xmlhttprequest(即文件传输请求),浏览器可以通过调用服务器预先分配的http数据传输接口向服务器发送文件传输请求。此处需要说明的是,浏览器可以预先与服务器商定好数据传输协议以及针对文件传输请求的响应过程,当浏览器按照预先商定好的数据传输协议向服务器发送文件传输请求之后,服务器在成功接收到该文件传输请求后可以按照预先商定的响应策略对该文件传输请求进行响应。服务器在接收到文件传输请求之后,可以立即对该文件传输请求进行响应,响应过程可以包括:首先对该文件传输请求进行解析,从中获取到目标文件的标识信息以及目标文件中每个文件分片的哈希值。服务器可以从本地存储中查找是否存在目标文件的标识信息所指示的文件,如果查找到这样的文件,则说明该目标文件之前已经向服务器上传过了,但是并不知道该目标文件是否已经上传完整。在服务器在本地存储中查找到目标文件之后,服务器可以继续查找本地存储中已经存在的文件分片及其对应的哈希值,并将本地存储中的这些哈希值与文件传输请求中所携带的目标文件的每个文件分片的哈希值进行比对,如果服务器本地存储中的文件分片的哈希值与目标文件的多个文件分片中的某个文件分片的哈希值相同,则说明服务器中已存在该文件分片。通过上述响应过程服务器可以确定出服务器中已存在的分片。

服务器在对文件传输请求进行响应以确定出服务器中已存在的分片集合之后,可以通过预先分配的http数据传输接口向浏览器发送确认消息,其中,该确认消息可以用于指示服务器中已存在的分片集合。服务器向浏览器发送确认消息告知服务器中已存在的分片集合,是为了通知浏览器接下来无需重复向服务器发送已传输完毕的分片集合,以实现文件的断点续传,这样能够减少重复发送文件分片所造成的资源消耗,减少浏览器的处理压力。

浏览器接收服务器发送的确认消息之后,可以对所接收到的确认消息进行解析,以确定出该确认消息所指示的服务器中已存在的分片集合,进而从目标文件的多个分片中筛选出服务器上已存在之外的文件分片,并将这些文件分片依次传输给服务器,进而实现目标文件的断点续传。

进一步,作为一种可选的实施例,服务器在接收到浏览器传输的文件分片之后,服务器可以采用md5、sha1等计算方法计算接收到的文件分片的哈希值,判断服务器已存在的分片集合的方法是依据,所述传输文件请求中的md5值的文件是否在所述服务器中存在,再将计算得到的该文件分片的哈希值与所接收到的文件传输请求中所携带的该文件分片的哈希值进行比对,如果两者相同,则说明该文件分片为目标文件的文件分片,则服务器将会存储该文件分片及其对应的哈希值;如果两者不同,则说明该文件分片不是目标文件的文件分片,该文件分片有可能是非法文件,则服务器将会丢弃该文件分片,并通知浏览器该文件分片上传失败,需要重新上传该文件分片。

该实施例中服务器通过比对接收到的文件分片的哈希值与文件传输请求中所携带的文件分片的哈希值是否相同,可以实现判断所接收到的文件分片的合法性和安全性,进而保证服务器所接收到的目标文件的准确度。

此处需要说明的是,对目标文件的处理可以包括但并不限于:获取目标文件的标识信息、获取目标文件的数据量大小,将目标文件划分成多个文件分片、为每个文件分片分配标识信息以及计算每个文件分片的哈希值等。还需要说明的是,目标文件的划分需要依赖浏览器的插件javascript将切割后的文件分片转换成buffer的形式,以便于对其进行位操作,这也是为浏览器的webworker计算每个文件分片的哈希值的前提。还需要说明的是,文件分片的哈希值的计算方法可以参考开源的md5、sha的实现,本发明实施例对webworker计算文件分片的哈希值所采用的计算方法不做具体限定,此处不再一一举例详细说明。

该实施例通过对目标文件划分成多个文件分片,能够降低浏览器一次处理目标文件的压力,尤其是在目标文件数据量很大的情况下。该实施例通过计算每个文件分片的哈希值,并将文件分片的哈希值通知给服务器,以便于服务器可以依据文件分片的哈希值确定所接收到的文件分片是否正确和安全,进而达到了服务器中所接收到的目标文件的准确度的效果。

请参考图3,为一种实施例的文件传输方法的模型架构的示意图,在用户选中需要传输的目标文件之后,该目标文件可以首先被上传至浏览器的上传页面中,然后浏览器的主进程(如图3中的ftn_uploader:上层js)可以通过与该上传页面的页面交互获取到该目标文件。其中,浏览器的主进程可以用于处理与浏览器操作页面(包括上传页面)的is交互、事件注册、回调等。浏览器在执行主进程的过程中,主进程(如图3中的ftn_uploader:底层webworker)可以通过与主进程之间的消息传输postmessage从主进程中获取到该目标文件。其中,在webworker中可以调用浏览器的插件javascript进程将目标文件划分成多个文件分片,并在webworker中计算md5、sha以及向服务器(如图3中的架平服务)发起http请求(也即文件传输请求)。此处需要注意的是,webworker与架平服务之间的双向箭头所表示的流程可以描述为:webworker先向架平服务发送xmlhttprespuest(即文件传输请求),该xmlhttprespuest中可以携带有目标文件的标识信息、目标文件的大小、文件分片的数量、每个文件分片的哈希值、每个文件分片的大小、每个文件分片的标号等信息,架平服务接收到该xmlhttprespuest之后确定本地已存在的文件分片,并将携带有指示本地已存在的文件分片的确认消息发送给webworker,webworker接收到架平服务发送的确认消息之后,可以从目标文件的多个文件分片中筛选出除架平服务中已存在的文件分片之外的文件分片,并从中选择一个文件分片发送给架平服务,架平服务接收到该文件分片之后可以首先根据哈希值判断该文件分片是否正确和安全,如果正确和安全,则在本地存储该文件分片,否则则丢弃该文件分片。在webworker接收到架平服务发送的确认消息的同时,webworker还可以根据确认消息所指示的架平服务本地已存在的文件分片的大小占目标文件的大小的比例确定目标文件的传输进度,并将该传输进度传输给上层js进程,上层js进程可以将该传输进度传输至上传页面中进行显示,以使得用户可以清楚直观地确定当前目标文件的传输进度。

针对图3所示的文件传输方法的实施历程,此处需要说明的是,底层webworker与架平服务之间的数据传输过程可以重复执行,每发送一个文件分片则需要执行一次webworker与架平服务之间的双向箭头所表示的流程,并向上传页面返回一次当前目标文件的传输进度。

服务器全部接收所述目标文件的文件分片后,采用定位读写方式将所有所述文件分片还原成目标文件。

本申请的实施例的文件传输方法能够适用于多浏览器和多浏览器版本间的大文件传输问题,应用javascript将预传输的大文件进行分片,然后将大文件的每个分片传输给预传输的目标设备。特别适用于政府机关或大型企业信息部门的多操作系统环境,应用文件分片上传和断点续传,还可配置分片文件大小、异步传输或同步并行传输,完全支持应用端集群或负载均衡环境的断点续传,在应用定位读写方式实现分片文件的快速整合,保证了大型文件在浏览器上的上传效率和成功率。此外,本发明实施例的文件传输方法可以支持主流的android和ios平台上的浏览器,无需浏览器进行特殊设置,实用性较强。

本领域技术人员可以理解,上述实施方式中各种方法的全部或部分功能可以通过硬件的方式实现,也可以通过计算机程序的方式实现。当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机存储器、磁盘、光盘、硬盘等,通过计算机执行该程序以实现上述功能。例如,将程序存储在设备的存储器中,当通过处理器执行存储器中程序,即可实现上述全部或部分功能。另外,当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序也可以存储在服务器、另一计算机、磁盘、光盘、闪存盘或移动硬盘等存储介质中,通过下载或复制保存到本地设备的存储器中,或对本地设备的系统进行版本更新,当通过处理器执行存储器中的程序时,即可实现上述实施方式中全部或部分功能。

实施例二:

请参考图4,为一种实施例的文件传输方法的模型架构的示意图,用于实施上述文件传输方法的文件传输装置,该装置可以包括:

响应单元41,用于响应于用户发送文件传输请求,获取用户需要传输的目标文件;将所述目标文件进行分片化,得到所述目标文件的若干个分片。

验证单元42,用于向服务器验证所述目标文件的所有分片;对于任一分片,若浏览器验证服务器已存在该分片,则将该分片标记为已传输,反之,若浏览器验证服务器不存在该分片,则将该分片标记为未传输。

发送单元43,用于向服务器传输标记为未传输的分片,以使得服务器将目标文件已存在的分片与本次接收到的分片融合为完整的目标文件。

该实施例中的发送单元41可以用于执行本申请实施例1中的步骤201和步骤202,该实施例中的接收单元42可以用于执行本申请实施例1中的步骤203,该实施例中的第一传输单元43可以用于执行本申请实施例1中的步骤204。上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例1所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现。

实施例三

请参考图5,为另一种实施例的文件传输系统的流程示意图,文件传输系统包括发送单元和接收单元,该方法包括以下步骤:

步骤301发送单元比较预上传的目标文件的大小与预设值进行比较。

步骤302如果目标文件大小小于预设值,发送单元发送验证信息给接收单元,用于验证接收单元是否存在目标文件。

步骤303接收单元比较验证信息,确认是否存在目标文件。

步骤304接收单元发送确认信息给发送单元。

步骤305发送单元接收到接收单元存在目标文件的确认信息,就结束传输请求。

步骤306发送单元接收到接收单元不存在目标文件的确认信息,就发送目标文件直至文件传输完毕。

步骤307如果目标文件大小大于预设值,发送单元将目标文件进行分片操作,生成分片文件。

步骤308发送单元发送一分片文件的哈希值,用于验证此分片文件在接受单元是否存在。

步骤309接收单元比较此哈希值,确认是否存在此分片文件。

步骤310接收单元将验证结果信息发送给发送单元。

步骤311发送单元获取的确认信息表示存在,则发送另一分片文件的哈希值给接收单元,用于验证此分片文件在接受单元是否存在。

步骤312发送单元获取的确认结果信息表示不存在,则将此分片文件发送给接收单元。

循环步骤308至步骤312,直至所有分片文件传输给接收单元。

步骤313发送单元发送确认信息给接收单元,用于表示目标文件的所有分片文件发送完毕。

步骤314,接收单元接收传输完毕的确认信息后,对所有分片文件进行整合,完成整个文件的传输。

其中,发送单元发送给接收单元的验证信息可以包括发送身份和文件的md5,以及该文件的总分片数。身份可以是登录用户的uid。接收单元返回的确认信息可以是该文件已经上传了的分片索引数组,这样就可以实现断点续传。我们设定分片大小是固定的,如果文件md5不变,那么它分片的结果也不会变。发送单元根据接收返回的分片索引来并行的上传文件,而不需要像上面那样同步递归。接收单元收到分片文件根据发送身份和文件md5来进行文件合并。当分片文件到达首次传输过来的该文件对应的总分片数时才合并。md5可以以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

以上应用了具体个例对本发明进行阐述,只是用于帮助理解本发明,并不用以限制本发明。对于本发明所属技术领域的技术人员,依据本发明的思想,还可以做出若干简单推演、变形或替换。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1