网站设计制作一条龙,北京商场推荐,立方集团 网站,服装设计公司的名字背景
开发票的时候远程会返回发票的url#xff0c;现在客户端需要下载发票#xff1b;因为一个订单可能不止一张发票#xff0c;因此需要通过网络把远程的文件下载回来并压缩成压缩文件进行返回。
实现
本文的例子直接基于java.net包下面的类实现。#xff08;因为是基于…背景
开发票的时候远程会返回发票的url现在客户端需要下载发票因为一个订单可能不止一张发票因此需要通过网络把远程的文件下载回来并压缩成压缩文件进行返回。
实现
本文的例子直接基于java.net包下面的类实现。因为是基于网络下载文件因此文件必须能通过类似于网络的方式访问
适合静态文件、接口文件流下载等。
如果确定是静态文件的也可以直接根据下载url来截取获取文件名及后缀稍微改一下即可。 如果效果不符合仔细检查文件名是否有问题。
import org.apache.commons.lang.StringUtils;
import java.io.*;
import java.net.URL;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;/*** ClassName: FileDownloadUtils* Author: yumoxuan* Date: 2025/3/6 16:25* Description:**/
public class FileDownloadUtils {/**** param urls 一个存放map的list;每个map存放一个远程文件路径url、一个本地文件名name;文件名可以通过增加filename/来调整压缩包内文件的层级* param zipFileUrl 压缩文件名称使用相对或绝对路径包含文件名及后缀* return* throws IOException*/public static void getZieFile(ListMapString,String urls,String zipFileUrl) throws IOException {if (urls null || urls.size() 0 || StringUtils.isBlank(zipFileUrl)) {//是否要抛异常return ;}File zipFile new File(zipFileUrl);File parentFile zipFile.getParentFile();
// if(zipFile.exists()){
// //去掉会覆盖已存在的文件
// return;
// }if(!parentFile.exists()){parentFile.mkdirs();}zipFile.createNewFile();ZipOutputStream outputStreamnew ZipOutputStream(new FileOutputStream(zipFile));SetString distinctSetnew HashSet();for(MapString,String map:urls){String url map.get(url);String name map.get(name);if(distinctSet.contains(name)){//重复名字的文件会导致压缩包内文件覆盖continue;}distinctSet.add(name);InputStream inputStream new URL(url).openStream();ZipEntry zipEntry new ZipEntry(name);outputStream.putNextEntry(zipEntry);byte[] bytes new byte[1024];int len 0;while ((len inputStream.read(bytes)) 0) {outputStream.write(bytes, 0, len);}outputStream.closeEntry();}outputStream.finish();outputStream.close();}public static void main(String[] args) {String zipFileUrlC:\\Users\\Administrator\\Documents\\发票\\test\\test1\\TestZip.zip;ListMapString,String listnew ArrayList();MapString,String mapnew HashMap();map.put(url,https://i-blog.csdnimg.cn/direct/6a9dff58549c40d5a94418a2162fae9b.jpeg);map.put(name,photo.jpg);MapString,String map1new HashMap();map1.put(name,addfile/table.png);map1.put(url,https://profile-avatar.csdnimg.cn/22ce7a74c84f44b48b361d4f7aeb1b85_weixin_43975276.jpg!1);list.add(map);list.add(map1);try {getZieFile(list,zipFileUrl);} catch (IOException e) {e.printStackTrace();}}
}
结果
运行前
运行后成功下载到本地并压缩成压缩包addfile/table.png也成功生成了一个文件夹并在文件夹内放table.png.