基于fastdfs的大文件分块上传及加密存储方法与流程
未命名
07-12
阅读:140
评论:0

1.本发明涉及文件加密上传技术领域,具体涉及基于fastdfs的大文件分块上传及加密存储方法。
背景技术:
2.fastdfs文件服务作为一个开源的轻量级分布式文件系统,具有分组存储,对等结构,对大、中、小文件均可以很好支持等特点,因此得到许多公司企业的青睐。但对于大文件的分块上传,只支持有顺序的调用其内部的append接口方法,对文件分块进行有序的追加合并,解决了大文件上传在弱网条件下的容错率。但在高带宽环境中,并不能并发上传对象分块来充分利用网络带宽,最大限度的增加文件上传的速度。
3.为了优化上传速率,进一步提高用户上传文件体验,此专利放弃fastdfs自带的append拼接文件接口,记录大文件分块上传过程中的每一块分块文件的唯一标识信息及上传返回的存储路径信息,并对每一块分块文件字节流进行aes加密,前端可并发上传分块文件,并由服务端返回唯一标识文件的已上传分块数量,当所有分块文件上传完后,通知服务端对该文件进行实际业务数据的写入,并关联唯一标识。在文件下载时,基于唯一标识关联查询分块文件,进行对称密钥解密下载,生成二进制文件,最后追加写入响应流。
4.现有技术中,前端采用vue-simple-uploader上传组件并进行封装,对大文件进行切块之后,携带切块文件及其相关信息并发请求服务端,服务端用multipartfile接收分块文件,对分块文件字节流进行aes加密后,上传至fastdfs服务器中,fastdfs返回上传存储路径后,持久化记录此次上传的分块文件信息,含标识分块属同一文件的唯一标识,存储路径,md5等信息。之后返回该文件已上传的片数信息。
5.前端根据返回的上传片数信息,判断是否完成整个文件上传,若整个文件的分块文件都上传成功,则请求业务接口,写入主文件信息并关联该文件唯一标识。
6.在文件下载时,基于唯一标识关联查询分块文件,进行对称密钥解密下载,生成二进制文件,最后追加写入响应流。
7.在分块上传文件整个过程,不对分块文件进行合并处理,节约了服务器的内存资源,同时也最大限度的提高了大文件上传的速率及容错率,并对每个分块文件进行aes加密,且由于fastdfs本身分卷存储及含fileid命名的特性,集分块,加密,不可读文件名及随机存储路径,使文件存储的安全性,得到了充足的保障。
8.然而,现有技术分块文件的结构化信息记录数据会很多,且用户取消上传后,之前文件的分块文件不进行删除操作,易在服务器内形成分片文件的非结构化脏数据。
技术实现要素:
9.为解决已有技术存在的不足,本发明提供了一种基于fastdfs的大文件分块上传及加密存储方法,包括如下步骤:步骤s1:获取用户选择上传文件,并按一定大小对文件进行切块,记录切块数,唯
一文件标识信息后,多线程并发式请求服务端;步骤s2:分块文件上传;步骤s3:针对上传好的分块文件,进行aes文件流加密;步骤s4:将加密后的分块文件执行最后的上传fastdfs操作。
10.其中,所述步骤s2包括如下步骤:步骤s21:构建chunk实体类内二进制文件;步骤s22:通过getbytes()函数获取上传后的文件二进制后计算其md5值,与前端传递的上传之前的文件二进制的md5值进行对比,确保文件无缺失。
11.其中,所述步骤s2中,在上传过程中,以每个分块文件为单位进行md5值校验,来判断所上传的文件是否存在于整个fastdfs内,以避免相同文件的重复存储。
12.其中,所述步骤s3包括如下步骤:步骤s31:生成指定算法密钥生成器的 keygenerator 对象,指定秘钥加密的算法"sha1prng",以及密钥,取得转换完的aes专用密钥;步骤s32:构建cipher的aes加密实例;步骤s33:通过cipher的aes加密实例及文件输入流来构建cipherinputstream加密流;步骤s34:将加密流写入文件后取得文件二进制byte数据,至此文件流加密完成。
13.本发明提供的基于fastdfs的大文件分块上传及加密存储方法,基于大文件的分块上传原理,适配fastdfs文件服务,最大限度的提升大文件上传的容错率及上传速率。同时,本发明对每一个分块文件进行aes加密存储,结合fastdfs存储特性,集分块,加密,不可读文件名及随机存储路径,使文件存储的安全性,得到了充足的保障。
附图说明
14.图1为本发明的基于fastdfs的大文件分块上传及加密存储方法的实现流程图。
具体实施方式
15.为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
16.本发明中,涉及到的术语在此解释及约定如下:fastdfs:一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。
17.分块上传:将要上传的文件切成一片片小的区块进行上传,然后服务端接收这些前端上传过来的小区块,存储到服务器存储文件的目录下,待上传完毕时将这些小区块合并成一个文件,并将已上传的这些区块删除。至此,上传过程结束。
18.加密存储:对上传至文件服务的文件,在系统上传过程中,读取文件流并对该文件流进行加密后,再上传至最后的文件存储服务。
19.图1为本发明的基于fastdfs的大文件分块上传及加密存储方法的实现流程图,本发明基于fastdfs建立的系统提供了灵活高效且安全可靠的大文件上传策略,主要实现以下功能:
1、基于vue封装的定制化uploader组件获取用户选择上传文件,并按一定大小对文件进行切块,记录切块数,唯一文件标识等信息后,多线程并发式请求服务端。其中唯一文件标识由上传前从服务器获取,用于标识某些分块文件同属某一整个文件,在上传完成后,记录于分块信息表及业务文件表内作为文件信息的关联,即业务文件表通过此标识,在分块信息表中拿到该整个文件的所有分块文件信息,用于文件下载。
20.2、分块文件上传构建chunk实体类,借用java中spring框架接口“multipartfile”接收请求体(接收请求体内所接收文件以及文件信息的放置位置涉及:http请求体body,binarybody存放文件、textbody存放文件相关信息)内二进制文件。通过getbytes()函数获取文件二进制后计算其md5值,与前端传递的上传之前的文件二进制的md5值进行对比,确保文件无缺失。
21.在上传过程中,以每个分块文件为单位进行md5值校验,来判断所上传的文件是否存在于整个fastdfs内,以避免相同文件的重复存储,具体的:通过查询系统内所存储的文件的md5值来判断是否上传过当前需要上传的文件,上传过则不再进行相关文件的上传,而是直接进行该文件系统业务数据写入,即实现秒传。其理论依据在于:分块文件信息存储至服务端时,分块文件信息中会包含整个分块文件的md5,因此,用所欲上传的文件的md5值匹配数据库内记录的之前上传过的整个文件,可以知道系统内是否存在与当前所欲上传文件md5值相同的整个文件,若存在,则获取该所欲上传的文件信息,取得文件存放路径等信息后进行数据写入,而不再对当前所欲上传的文件执行上传操作,同时通知前端该所欲上传的文件已执行秒传,停止继续请求。经过其他系统内业务校验后,调用重构的fatdfs上传文件接口,加密上传该文件块(此步骤下文详述)。
22.前端根据返回已上传分块信息,对比此过程中所上传的文件总分块数,相等时调用业务数据写入接口,在系统中写入整个文件(即上文所述的数据库内记录的之前上传过的整个文件)的相关信息,此时文件显示于系统列表中。
23.3、aes文件流加密aes加密过程在实际上传fastdfs之前一步,对文件加密后再进行最后的上传fastdfs操作。
24.加密过程如下:(1)首先生成指定算法密钥生成器的 keygenerator 对象,然后指定秘钥加密的算法"sha1prng",以及密钥(文件md5值,位数不足时进行补充),此过程采用128位密钥加密,最后取得转换完的aes专用密钥;(2)随后构建cipher的aes加密实例,具体的,调用初始化方法传入转换完的aes专用密钥及加密模式参数完成cipher实例初始化;(3)之后通过cipher的aes加密实例及文件输入流(要加密的文件)来构建cipherinputstream加密流;(4)最后将加密流写入文件后取得文件二进制byte数据,至此文件流加密完成。最后调用fastdfs文件上传接口,返回如“group1/m00/04/e3/rb7u_wnpxroayedlaaaemkt_kla520.txt”格式的不可读文件名及随机存储路径。
25.4、解密文件下载针对业务表某个文件下载,首先通过业务表内的唯一文件标识,关联分块信息表取得该文件所有分块文件列表(分片文件片号顺序排列,方便之后解密完成后的挨个追加写入),含每一个分块文件的存储地址,接着调用fastdfs下载文件接口,取得文件二进制,
此时的分块文件二进制为加密二进制,所以还需要对每一块分块文件的文件二进制调用系统封装的aes解密,最后将解密完成的文件二进制数据以可追加的方式写入response响应流。
26.本发明提供的基于fastdfs的大文件分块上传及加密存储方法,基于大文件的分块上传原理,适配fastdfs文件服务,最大限度的提升大文件上传的容错率及上传速率。同时,本发明对每一个分块文件进行aes加密存储,结合fastdfs存储特性,集分块,加密,不可读文件名及随机存储路径,使文件存储的安全性,得到了充足的保障。
27.虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。
技术特征:
1.基于fastdfs的大文件分块上传及加密存储方法,其特征在于包括如下步骤:步骤s1:获取用户选择上传文件,并按一定大小对文件进行切块,记录切块数,唯一文件标识信息后,多线程并发式请求服务端;步骤s2:分块文件上传;步骤s3:针对上传好的分块文件,进行aes文件流加密;步骤s4:将加密后的分块文件执行最后的上传fastdfs操作。2.如权利要求1所述的基于fastdfs的大文件分块上传及加密存储方法,其特征在于,所述步骤s2包括如下步骤:步骤s21:构建chunk实体类内二进制文件;步骤s22:通过getbytes()函数获取上传后的文件二进制后计算其md5值,与前端传递的上传之前的文件二进制的md5值进行对比,确保文件无缺失。3.如权利要求1所述的基于fastdfs的大文件分块上传及加密存储方法,其特征在于,所述步骤s2中,在上传过程中,以每个分块文件为单位进行md5值校验,来判断所上传的文件是否存在于整个fastdfs内,以避免相同文件的重复存储。4.如权利要求1所述的基于fastdfs的大文件分块上传及加密存储方法,其特征在于,所述步骤s3包括如下步骤:步骤s31:生成指定算法密钥生成器的 keygenerator 对象,指定秘钥加密的算法"sha1prng",以及密钥,取得转换完的aes专用密钥;步骤s32:构建cipher的aes加密实例;步骤s33:通过cipher的aes加密实例及文件输入流来构建cipherinputstream加密流;步骤s34:将加密流写入文件后取得文件二进制byte数据,至此文件流加密完成。
技术总结
本发明涉及基于fastdfs的大文件分块上传及加密存储方法,包括如下步骤:获取用户选择上传文件,并按一定大小对文件进行切块,记录切块数,唯一文件标识信息后,多线程并发式请求服务端;分块文件上传;针对上传好的分块文件,进行AES文件流加密;将加密后的分块文件执行最后的上传fastdfs操作。本发明提供的基于fastdfs的大文件分块上传及加密存储方法,基于大文件的分块上传原理,适配fastdfs文件服务,最大限度的提升大文件上传的容错率及上传速率。同时,本发明对每一个分块文件进行AES加密存储,结合fastdfs存储特性,集分块,加密,不可读文件名及随机存储路径,使文件存储的安全性,得到了充足的保障。得到了充足的保障。得到了充足的保障。
技术研发人员:陈文 郭静东 阴泽鹏 余强 刘晨
受保护的技术使用者:麒麟软件有限公司
技术研发日:2023.04.14
技术公布日:2023/7/7
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
上一篇:一种防止面包弹飞的多士炉的制作方法 下一篇:一种转辙机及其动作板组机构的制作方法