本申请属于文件存储和管理领域,尤其涉及一种流式处理压缩文件并实时上传至存储服务的方法。
背景技术:
1、在过去的几十年中,数据压缩技术已经成为信息技术领域的核心组成部分。随着数字数据的迅速增长,如何有效地存储和传输数据成为了一个重要的挑战。数据压缩技术旨在通过减少数据的冗余来减小文件的大小,从而节省存储空间并加速数据传输。
2、zip是最常用的文件压缩格式之一,由phil katz在1989年首次介绍。zip文件格式不仅支持多种压缩算法,如deflate和bzip2,还支持文件夹的压缩,允许用户将多个文件和文件夹压缩成一个单独的zip文件。此外,zip文件格式还支持加密、文件分片和其他高级功能,使其成为了数据压缩和存档的首选格式。
3、随着计算机技术的发展,数据存储已经从传统的物理硬盘转向了云存储。云存储提供了一个集中的、可扩展的和经济高效的解决方案,允许用户在云中存储和检索数据。这种转变不仅为大型企业带来了便利,也为中小型企业和个人用户提供了前所未有的数据存储和备份能力。
4、minio是一个开源的对象存储服务,与amazon s3兼容。由于其轻量级、高性能和易于部署的特点,minio在云存储领域受到了广泛关注。minio提供了一个简单的api,允许开发者轻松地上传、下载和管理对象数据。
5、尽管zip文件格式和minio存储服务各自为数据压缩和存储提供了高效的解决方案,但将大型zip文件直接上传到云存储仍然面临一些挑战。传统的处理方法是首先在本地完整地解压zip文件,然后再将解压后的内容上传到云存储。这种方法不仅需要大量的中间存储空间,而且在处理大型zip文件时可能会导致长时间的延迟。
6、因此,存在一个明确的需求,即开发一种新的方法,可以流式地处理zip文件,并将其内容实时上传到minio或其他云存储服务,无需预先在本地解压整个文件。
7、前面的叙述在于提供一般的背景信息,并不一定构成现有技术。
技术实现思路
1、针对上述问题,本申请旨在提供一种流式处理压缩文件并实时上传至存储服务的方法,在对压缩文件进行解压缩以及上传至存储服务的过程中,无需占用大量的中间存储空间,也不用担心因处理大型压缩文件而导致长时间的延迟。
2、本申请提供了一种流式处理压缩文件并实时上传至存储服务的方法,所述方法包括:
3、初始化流式读取环境;
4、流式读取并解析压缩文件;
5、对解析后的文件进行处理;
6、将处理后的所述文件上传至存储服务,并保留所述压缩文件的文件目录结构。
7、根据本申请的一个实施方式,所述初始化流式读取环境,包括:
8、创建用以读取所述压缩文件内容的缓冲区;
9、初始化用以存储读取的未处理数据的字节切片剩余;
10、创建用以跟踪上传的文件的map集合;
11、创建用于存储待上传的文件部分的缓冲通道;
12、创建用于管理线程生命周期的上下文。
13、根据本申请的一个实施方式,所述流式读取压缩文件,包括:
14、从压缩文件的输入流中读取数据到所述缓冲区;
15、合并所述字节切片剩余与读取到所述缓冲区的内容,形成联合字节切片。
16、根据本申请的一个实施方式,所述解析压缩文件,包括:
17、根据所述压缩文件结构检测所述联合字节切片中的每个字节;
18、当检测到所述压缩文件的头部标志时,解析出所述压缩文件包含文件的属性信息,所述属性信息包括:名称、大小以及压缩方法中的至少一种;
19、根据所述属性信息读取并解压所述文件的文件数据。
20、根据本申请的一个实施方式,根据所述属性信息读取并解压所述文件的文件数据,包括:
21、根据所述属性信息检测所述压缩文件中是否存在动态大小的文件,若是,则查找下一个压缩文件的头部标志;
22、当检测到所述文件的结束位置时,根据所述压缩方法对所述压缩文件济宁解压。
23、根据本申请的一个实施方式,所述对解析后的文件进行处理,包括:
24、检测文件名是否为预设编码格式;
25、若否,则将所述文件名转换成所述预设编码格式;
26、基于转换后的所述文件名和目标路径,生成所述文件的文件路径。
27、根据本申请的一个实施方式,所述检测文件名是否为预设编码格式之前,还包括:
28、过滤解压所述压缩文件的文件夹,保留所述文件。
29、根据本申请的一个实施方式,所述将处理后的所述文件上传至存储服务,包括:
30、将解压后的文件数据和处理后的文件名发送至所述缓冲通道;
31、启动多线程上传所述缓冲通道中的所述文件数据和所述文件名至存储服务中;
32、若检测到所述文件数据和所述文件名上传成功,则关闭缓冲通道。
33、根据本申请的一个实施方式,所述启动多线程上传所述缓冲通道中的所述文件数据和所述文件名至存储服务中,包括:
34、所述多线程并行和/或串行上传对应的所述文件数据和所述文件名;
35、若检测到线程上传失败,则暂停所述线程;
36、当所述线程的暂停达到预设时间后,重新上传;
37、若检测到所述线程上传失败的次数达到预设次数值,则关闭所述缓冲通道和/或输出提示信息。
38、根据本申请的一个实施方式,所述方法还包括:
39、若检测到错误处理,则将所述错误处理发送至错误处理函数;
40、所述错误处理函数输出错误信息。
41、有益效果:
42、通过使用本申请的流式处理压缩文件并实时上传至存储服务的方案,在实时性方面,由于采用流式处理,数据可以在读取的同时被解压和上传,极大地提高了处理速度;在资源利用方面,不需要预加载整个zip文件,从而大大减少了内存和cpu的使用;在鲁棒性方面,集中的错误处理和自动重试机制确保了数据处理的可靠性,即使在网络不稳定或其他不确定性因素的影响下。
1.一种流式处理压缩文件并实时上传至存储服务的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述初始化流式读取环境,包括:
3.根据权利要求2所述的方法,其特征在于,所述流式读取压缩文件,包括:
4.根据权利要求2所述的方法,其特征在于,所述解析压缩文件,包括:
5.根据权利要求4所述的方法,其特征在于,根据所述属性信息读取并解压所述文件的文件数据,包括:
6.根据权利要求1所述的方法,其特征在于,所述对解析后的文件进行处理,包括:
7.根据权利要求6所述的方法,其特征在于,所述检测文件名是否为预设编码格式之前,还包括:
8.根据权利要求2-7任一项所述的方法,其特征在于,所述将处理后的所述文件上传至存储服务,包括:
9.根据权利要求8所述的方法,其特征在于,所述启动多线程上传所述缓冲通道中的所述文件数据和所述文件名至存储服务中,包括:
10.根据权利要求8所述的方法,其特征在于,所述方法还包括: