一种基于HTML5和Python的大文件上传方法与流程

文档序号:21318735发布日期:2020-06-30 20:49阅读:468来源:国知局
一种基于HTML5和Python的大文件上传方法与流程

本发明涉及网页文件上传技术领域,特别涉及一种基于html5和python的大文件上传方法。



背景技术:

目前,在网页内上传体积庞大的文件通过接口数据请求的方式实现有很大的困难,普通html表单在上传几kb或几mb级别的文件时基本无压力,但在上传上百mb甚至是gb级别大文件很难实现。

在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的excel表格数据、上传影音文件等。如果文件体积比较大,或者网络条件不好时,上传的时间会比较长(要传输更多的报文,丢包重传的概率也更大),用户不能刷新页面,只能耐心等待请求完成。再者,上传一个大文件发生异常掉线的可能性非常大,为了避免重新上传,支持断点续传就变得非常必要了。

由于移动互联网的不稳定性,为了更好的适应当前的移动互联网,要求对上传服务支持断点续传、断线重连。

散列算法(hashalgorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是用户所需求的文件。

一个优秀的哈希算法,具有以下特点:

1)正向快速:给定明文和hash算法,在有限时间和有限资源内能计算出hash值。

2)逆向困难:给定(若干)hash值,在有限时间内很难(基本不可能)逆推出明文。

3)输入敏感:原始输入信息修改一点信息,产生的hash值看起来应该都有很大不同。

4)冲突避免:很难找到两段内容不同的明文,使得它们的hash值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

但在不同的使用场景中,如数据结构和安全领域里,其中对某一些特点会有所侧重。

安全散列算法(英语:securehashalgorithm,缩写为sha)是一个密码散列函数家族,是fips所认证的安全散列算法。能计算出一个数字消息所对应到的、长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,sha算法对应到不同字符串的机率很高。

sha家族的五个算法,分别是sha1、sha224、sha256、sha384和sha512。主要适用于数字签名标准(digitalsignaturestandard,缩写为dss)里面定义的数字签名算法(digitalsignaturealgorithm,缩写为dsa)。比特币里面的就是sha256算法。安全散列算法说简单一些,就是对一个对象的多个关键不重复信息组合起来,通过算法生成一个加密字符串。

基于上述情况,本发明提出了一种基于html5和python的大文件上传方法。



技术实现要素:

本发明为了弥补现有技术的缺陷,提供了一种简单高效的基于html5和python的大文件上传方法。

本发明是通过如下技术方案实现的:

一种基于html5和python的大文件上传方法,其特征在于:无需使用第三方上传文件的库,在前端将文件分隔成块,然后逐次将分隔成块的文件上传到后台,支持断点续传技术,后台python环境拿到代码片段后拼接成完整文件,保存即可。

本发明基于html5和python的大文件上传方法,包括以下步骤:

第一步,对整个文件进行加密处理,加密后的文件生成唯一标识的字符串;

第二步,上传前先把加密文件的值传递给后台,后台根据收到的加密文件的值查询该文件是否已经上传,如果该文件已经上传,则无需再次重复上传;

第三步,对文件进行切片处理,循环每个文件分片,将文件分片分次上传即可。

所述第一步中,对文件进行sha256加密,加密后的文件生成一串256的字符串,所述字符串拥有唯一性,可以为后台进行文件完整性的校验进行比对。

所述第二步中,上传前将文件名称和整个文件的sha256值传递给python端,服务器收到校验文件的ajax请求后,查看文件是否已经存在,若文件不存在,则返回已上传文件块的列表list;若没有已上传文件,则列表list为空。

所述第三步中,利用file的api提供的slice操作对文件进行切片处理,并为文件分片进行编号,以编号作为文件名,以整个文件的sha256值作为文件夹名进行存储。

所述第三步中,文件切片时,根据预设的分片文件大小,将整个文件分割成n+1个相同大小的分片文件,依次编号为0~n,n为自然数。

所述第三步中,文件上传时,循环每个文件分片,并与服务器返回的列表list做比对,若文件分片的文件名在列表list中则无需上传,若文件分片的文件名未在列表list中,则将对应的文件分片进行上传;当所有文件分片循环完成后,通知服务器进行文件分片的合并。

所述第三步中,向后台请求一个接口,接口里面的数据是整个文件已经上传过的文件分片;当上传中断时,服务器通过后台接口保留已上传的文件分片,当上传恢复时可以直接跳过已经上传的文件分片,直接进行后续文件分片的上传;当所有文件分片都上传完成,告知python端合并文件。

本发明的有益效果是:该基于html5和python的大文件上传方法,通过后台和应用程序的协作,将用户上传大文件的操作变得简单、高效,不仅实现了断点续传的功能,减少了用户等待的时间,还能防止用户多次重复上传相同内容,节省了用户的流量和时间成本,让应用程序变得更省流量,系统更流畅。

附图说明

附图1为本发明基于html5和python的大文件上传方法示意图。

附图2为本发明前后端分工示意图。

具体实施方式

为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合实施例,对本发明进行详细的说明。应当说明的是,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

该基于html5和python的大文件上传方法,无需使用第三方上传文件的库,在前端将文件分隔成块,然后逐次将分隔成块的文件上传到后台,支持断点续传技术,后台python环境拿到代码片段后拼接成完整文件,保存即可。

该基于html5和python的大文件上传方法,包括以下步骤:

第一步,对整个文件进行加密处理,加密后的文件生成唯一标识的字符串;

第二步,上传前先把加密文件的值传递给后台,后台根据收到的加密文件的值查询该文件是否已经上传,如果该文件已经上传,则无需再次重复上传;

第三步,对文件进行切片处理,循环每个文件分片,将文件分片分次上传即可。

所述第一步中,对文件进行sha256加密,加密后的文件生成一串256的字符串,所述字符串拥有唯一性,可以为后台进行文件完整性的校验进行比对。

所述第二步中,上传前将文件名称和整个文件的sha256值传递给python端,服务器收到校验文件的ajax请求后,查看文件是否已经存在,若文件不存在,则返回已上传文件块的列表list;若没有已上传文件,则列表list为空。

所述第三步中,利用file的api提供的slice操作对文件进行切片处理,并为文件分片进行编号,以编号作为文件名,以整个文件的sha256值作为文件夹名进行存储。

所述第三步中,文件切片时,根据预设的分片文件大小,将整个文件分割成n+1个相同大小的分片文件,依次编号为0~n,n为自然数。

假如文件是1000m,一个文件切片大小我们定义为5m,那么整个文件就为分为200个文件切片,分200次次上传。

所述第三步中,文件上传时,循环每个文件分片,并与服务器返回的列表list做比对,若文件分片的文件名在列表list中则无需上传,若文件分片的文件名未在列表list中,则将对应的文件分片进行上传;当所有文件分片循环完成后,通知服务器进行文件分片的合并。

所述第三步中,向后台请求一个接口,接口里面的数据是整个文件已经上传过的文件分片;当上传中断时,服务器通过后台接口保留已上传的文件分片,当上传恢复时可以直接跳过已经上传的文件分片,直接进行后续文件分片的上传;当所有文件分片都上传完成,告知python端合并文件。

与现有技术相比,该基于html5和python的大文件上传方法,具有以下特点:

第一、通过后台和应用程序的协作,将用户上传大文件的操作变得简单、高效,实现轻松上传大文件;

第二、实现了断点续传的功能,减少了用户等待的时间;

第三、还能防止用户多次重复上传相同内容,节省了用户的流量和时间成本,让应用程序变得更省流量,系统更流畅。

以上所述的实施例,只是本发明具体实施方式的一种,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。

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