一种大文件下载传输方法与流程

文档序号:22084881发布日期:2020-09-01 19:55阅读:210来源:国知局
一种大文件下载传输方法与流程

本发明涉及计算机领域,特别是涉及一种大文件下载传输方法。



背景技术:

目前广告播放终端被广泛应用,广告播放终端需要重服务器下载播放文件,播放文件直接存储于磁盘上。终端下载文件时,服务器要不断的读取文件,进行磁盘io操作。在i/o机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地址空间。播放终端读取播放文件时,检查内核的缓冲区有没有需要的数据,如果已经缓存了,那么就直接从缓存区中返回;否则从磁盘中读取,然后缓存在播放终端的缓存区中。

现有技术存在以下弊端:多个播放终端下载播放文件时,每个播放终端每次都是从文件的不同位置请求数据,造成服务端过多的磁盘io操作,影响性能,过多占用服务器资源;过大的文件不能进行缓存,每次只能从磁盘读取,受磁盘读取速度的影响比较大;广告播放终端一般布置在电梯中,广告播放终端与服务器的通讯时常中断,较大的播放文件无法一次性上传至播放终端,断点传输必须保证上传传输位置的准确,否则后导致下载文件失败或不完整;反映下载进度需要额外发送请求。



技术实现要素:

基于上述问题,本发明提供了一种大文件下载传输方法,用以提高播放终端读取服务器内播放文件的读写速度。

为解决上述问题,技术方案是:一种大文件下载传输方法,包括以下步骤,

步骤1.服务端将播放文件分割成n个子文件,子文件按从小到大顺序排列编号;

步骤2.服务端将n个子文件分别存储在磁盘;

步骤3.生成数据索引文件;

步骤4.播放终端向服务端发送读取请求时,服务端返回数据索引文件,播放终端读取数据索引文件,获得编号信息集、n个子文件的数量、每个子文件的大小信息,根据编号信息集和每个子文件的大小信息生成待请求集;

步骤5.播放终端从待请求集中选取第i~j号子文件形成请求集,向服务端发出请求;

步骤6.服务端将第i~j号子文件从磁盘中复制到内存的缓存区,并设置缓存时间;

步骤7.再将第i~j号子文件从内存的缓存区复制到发出请求集的播放终端;

步骤8.服务端读取已复制子文件的编号和大小信息,按已复制子文件的编号为索引条件,比较已复制子文件的大小信息是否与请求集中子文件的大小信息相同,若相同,则标记子文件为请求完成,若不同,则标记子文件为中断,统计请求完成的子文件的数目,和请求完成的子文件的编号和子文件大小信息形成已请求集;

步骤9.根据请求完成的子文件的数目的子文件数量与数据索引文件中子文件总数的比值,获得播放文件下载进度,根据已请求集与待请求集的补集,更新步骤4的待请求集;

步骤10.重复步骤4~9直至,步骤9得到的待请求集为空,将已复制的所有子文件合并。

优选地,若已请求集小于请求集,播放终端执行步骤9前,执行断点传输,

步骤11.从步骤8中统计所有中断的子文件的编号和子文件大小信息形成中断集;

步骤12.从中断集中选取所有子文件形成请求集,向服务端发出请求;

步骤13.将被请求的子文件从内存的缓存区复制到发出请求集的播放终端;

步骤14.重复步骤步骤8,直至已请求集与步骤11的中断集的补集为空。

较佳地,所述子文件大小信息为每个文件的md5校验码。

较佳地,步骤8为:服务端读取已复制子文件的编号和已复制子文件的md5校验码,按已复制子文件的编号为索引条件,比较已复制子文件的md5校验码是否与请求集中子文件的md5校验码相同,若相同,则复制成功,标记子文件为请求完成,若不同,则下载失败或子文件被篡改,标记子文件为中断,统计请求完成的子文件的数目,和请求完成的子文件的编号和md5校验码形成已请求集。

较佳地,步骤1中播放文件分割成n个大小相同的子文件前包括步骤,将播放文件转化为初始md5校验码;

步骤4中数据索引文件还包括初始md5校验码;

步骤10中合并所有子文件后,还包括步骤,读取合并文件的md5校验码,将合并文件的md5校验码与初始md5校验码比较,若相同则下载成功,若不同,则返回步骤1,对播放文件重新分割后重复步骤1~10,直至下载成功。

进一步地,步骤11中子文件大小信息为中断的子文件对应的请求集中子文件md5校验码。

本发明的有益效果为:服务端将大文件按顺序分割成很多个从小到大顺序拍了的小文件,并且编号。播放终端在下载前先请求要下载文件的信息,服务端返回大文件被分成的小文件数量、编号、每个文件的大小和最后一个文件的大小;播放终端第一次请求某个小文件时,该文件会被载入内存,并设置缓存时间,后续终端再请求这个小文件时,直接从内存读取;服务端和终端可根据每次请求的文件编号,即可知道下载进度;因网路故障中断下载的文件,再进行断点传输时,只需要从最后一次传输的编号开始接着往后情况即可;所有小文件下载完成,终端进行校验合并。

如此将大文件分割成小文件,系统每次只需要读取每个小文件,对系统资源影响小;将小文件进行缓存,提高性能;对每个小文件设置缓存时间,缓存时间后从内存中删除,保证在同一时间段只有一部分文件被载入内存,有效防止内存被占满或文件过多过大不能载入内存情况;断点传输只需要获得已下载文件的数据即可,简单准确;读取下载进度无需额外操作。

附图说明

图1为本发明的大文件下载传输方法的流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。

本发明的核心思想是:将大文件分割成小文件,复制到内存缓存,播放终端每次只需要读取每个小文件,对系统资源影响小;将小文件进行缓存,提高性能;对每个小文件设置缓存时间,缓存时间后从内存中删除,保证在同一时间段只有一部分文件被载入内存,有效防止内存被占满或文件过多过大不能载入内存情况;分割下载便于实现断点传输,还增加了下载线程,提高下载速度。

图1为本发明实施例的方法流程示意图,一种大文件下载传输方法,包括以下步骤,

步骤s1.服务端将播放文件1转化为初始md5校验码,再将播放文件分割成n个子文件,子文件按从小到大顺序排列编号;md5即消息摘要算法(英语:md5message-digestalgorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hashvalue),用于确保信息传输完整一致。它的作用就在于对下载回来的文件用windowsmd5check做一次md5校验,以确保我们获得的文件与该站点提供的文件为同一文件。

步骤s2.服务端将n个子文件分别存储在磁盘;

步骤s3.生成数据索引文件;

步骤s4.播放终端向服务端发送读取请求时,服务端返回数据索引文件,播放终端读取数据索引文件,获得初始md5校验码、编号信息集、n个子文件的数量、每个子文件的md5校验码,根据编号信息集和每个子文件的md5校验码生成待请求集;

步骤s5.播放终端从待请求集中选取第i~j号子文件的编号形成请求集,向服务端发出请求;

步骤s6.服务端将第i~j号子文件从磁盘中复制到内存的缓存区,并设置缓存时间;

步骤s7.再将第i~j号子文件从内存的缓存区复制到发出请求集的播放终端;

步骤s8.服务端读取已复制子文件的编号和md5校验码,按已复制子文件的编号为索引条件,比较已复制子文件的md5校验码是否与请求集中子文件的md5校验码相同,若相同,则复制成功,标记子文件为请求完成,若不同,则下载失败或子文件被篡改,标记子文件为中断,统计请求完成的子文件的数目,和请求完成的子文件的编号和子文件md5校验码形成已请求集;

步骤s9.从步骤s8中统计所有中断的子文件的编号和中断的子文件对应的请求集中子文件md5校验码形成中断集;

步骤s10.从中断集中选取所有子文件形成请求集,向服务端发出请求;

步骤s11.将被请求的子文件从内存的缓存区复制到发出请求集的播放终端;

步骤s12.重复步骤步骤s8,直至已请求集与步骤s9的中断集的补集为空。

步骤s13.根据请求完成的子文件的数目的子文件数量与数据索引文件中子文件总数的比值,获得播放文件下载进度,根据已请求集与待请求集的补集,更新步骤s4的待请求集;

步骤s14顺次重复步骤s4~s8、步骤s13直至,步骤s13得到的待请求集为空,将已复制的所有子文件合并,读取合并文件的md5校验码,将合并文件的md5校验码与初始md5校验码比较,若相同则下载成功,若不同,则返回步骤s1,对播放文件重新分割后重复步骤s1~s14,直至下载成功。

步骤s14中若合并文件的md5校验码与初始md5校验码不同,说明,分割发生错误。

本发明的系统还包括依次信号连接的服务端、磁盘、缓存,终端与缓存、磁盘通讯连接。

综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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