Hutool一行代码下载文件,无需落地解压文件并上传到MinIO
最近对接外部系统,需要每天定时获取电子回单,我们一致默认回单是pdf
,所以,我们系统并没有做文件存储,直接存了文件地址,由于事先没有沟通好回单的传输格式,以至于在系统上线之后才发现,外部系统提供的文件格式和预想中的不一样。他们是把pdf的回单压缩了一次。这使得我们无法直接将文件传输到税务系统。外部系统是提供的他们所谓的标准接口,如果要调整也可以,加钱
,说到钱,那就只有自己来解决了。
我的思路是,先调外部接口,获取到回单压缩文件,将文件解压,取出文件并上传到MinIO
中,然后将MinIO
的文件地址存入到数据库中,考虑到文件比较小,单每天会产生接近上万的文件,如果将文件先落地、再解压上传,会有一个磁盘消耗。所以,这里,我们就直接在内存中操作。
关于网络文件下载,压缩文件解压的工具类在网上也是非常多,由于之前一直在用Hutool
,我们便使用它来处理网络文件的下载吧。非常方便,仅需一行代码接口获取打文件流
下载远程文件
1 | byte[] zipFile = HttpUtil.downloadBytes("网络文件地址"); //获取网络文件流 |
解压文件
在Hutool中,有提供ZipUtil
这个工具类,但是针对zip
格式的压缩文件的解压,Hutool
需要先落地文件,再调用ZipUtil.unzip
来解压。
那么,这显示不符合我需要,此时,我们可以去找其他的工具类或者用JDK
自带的ZipInputStream
来处理。我则选择了后者。
1 | InputStream inputStream=new ByteArrayInputStream(zipFile); |
上传到MinIO
首先,初始化MinIO
的配置
1 | @Bean |
上传文件流到MinIO
1 | minioClient.putObject(PutObjectArgs.builder().bucket(this.bucket).object("文件名").stream(new ByteArrayInputStream(unzipFileByte), unzipFileByte.length, -1).build()); |
组装MinIO
的URL地址,并存入到数据库中。
Hutool一行代码下载文件,无需落地解压文件并上传到MinIO