一、前言下载文件在我们项目很常见,有下载视频、文件、图片、附件、导出Excel、导出Zip压缩文件等等,这里我对常见的下载做个简单的总结,主要有文件下载、限速下载、多文件打包下载、URL文件打包下载、Excel导出下载、Excel批量导出Zip包下载、多线程加速下载。二、搭建Spring Boot项目搭建个SpringBoot Web项目,引用常用依赖,commons-io作常用IO操作,hutool-all、poi-ooxml做导出Excel操作,commons-compress做多线程压缩...
一、前言
下载文件在我们项目很常见,有下载视频、文件、图片、附件、导出Excel、导出Zip压缩文件等等,这里我对常见的下载做个简单的总结,主要有文件下载、限速下载、多文件打包下载、URL文件打包下载、Excel导出下载、Excel批量导出Zip包下载、多线程加速下载。
二、搭建Spring Boot项目
搭建个SpringBoot Web项目,引用常用依赖,commons-io作常用IO操作,hutool-all、poi-ooxml做导出Excel操作,commons-compress做多线程压缩。
三、文件下载
3.1 单文件下载
最简单的下载就是提供一个文件下载接口,浏览器请求接口后预览或者下载文件,这里以下载一个1.2G的视频为例,直接看 /download接口
这里有以下几点需要注意:
1. response.setContentType设置文件的类型2. Content-Disposition设置文件下载时显示的文件名,如果有中文乱码,需要URLEncode,如果希望浏览器直接打开可以设置"inline"3. response.setContentLengthLong(file.length()),设置Http body长度可以在下载时显示进度4. 下载完成需要关闭流,这里使用try-with-resource自动关闭流
3.2限速下载
使用第一种下载速度会非常快,可能瞬间就将你的服务器带宽占满了,所以就需要限制下载速度。某盘开会员和不开会员下载速度相差非常大,就是针对不用同步给限制了不同的下载速度
3.3多文件打成ZIP包下载
有了单文件下载,肯定就用多文件下载,一般浏览器下载多个文件是将多个文件打包成一个Zip文件下载。
多文件打成Zip包注意事项:
1. zipOutputStream.setLevel(0)设置压缩等级,0为不压缩,这样可以提升下载速度2. 多个文件打包下载时并不是所有文件压缩完成后才开始下载,而是边压缩边下载,这样用户点了下载后,下载任务会直接进入浏览器下载列表
3.4整个文件夹下载
有时需要递归将整个文件夹打包下载下来
注意事项:
1. 会递归整个文件夹,文件夹文件不能太多
3.5通过URL打包下载
有时我们的文件可能是存在云存储上,数据库里存的是文件的ULR,下载时我们就需要通过URL将多个文件打包下载
3.6导出Excel下载
有些下载的文件并不存在,而是先从数据库中查出数据,再动态生成文件,再提供给用户下载,这里我们以导出单个Excel文件为例:
3.7批量导出Excel打包下载
很多业务需要一次性导出多个Excel,这里我们可以将多个Excel压缩成一个Zip文件下载下来,这里以动态生成10个Excel主例:
3.8多线程加速下载
有时下载数据量比较多,单线程打包会比较慢,这里我们就需要使用多线程并发打包提高打包速度,这里我以多线程下载多个URL文件为例使用commons-compress的ParallelScatterZipCreator多线程并发打包
3.9多线程批量导Excel打包下载
这种是比较复杂的,动态生成多个Excel文件后,使用多线程打成ZIP包下载
四、总结
本文主要总结了常用9种常见的文件下载操作,并提供对应的演示代码,当然还有一些没有总结到的,如分片下载、断点结续下、分布式下载限速等,这些高级下载在普通项目中用到的不太多所以没有总结。
到此这篇关于Java中常用的9种文件下载方法总结的文章就介绍到这了,更多相关Java文件下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!