ZipOutputStream多文件打包下载

public void batchDownload(HttpServletRequest request, HttpServletResponse response) {
    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition", "attachment; filename=压缩.zip");
    ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
    //key="文件名" value="文件地址"
    Map<String, String> pictureMap = new HashMap<>();
    Map<String, InputStream> isMap = getStringInputStreamMap(pictureMap);

    //XSSFWorkbook wb = new XSSFWorkbook();
	//ZipEntry entry = new ZipEntry("xxx.xls");
	//zipOut.putNextEntry(entry);
	//ByteArrayOutputStream bos = new ByteArrayOutputStream();
	//wb.write(bos);
	//bos.writeTo(zipOut);

    isMap.forEach((fileName, is) -> {
		addToZip(is, zipOut, fileName);
	});
	zipOut.flush();
	zipOut.close();
}



	/*处理文件*/
	private Map<String, InputStream> getStringInputStreamMap(Map<String, String>         pictureMap) {
		Map<String, InputStream> isMap = new HashMap();
		for (Map.Entry<String,String> entry: pictureMap.entrySet()) {
			String[] fileNameParts = entry.getValue().split("/");
			String fileName = entry.getKey()+fileNameParts[fileNameParts.length - 1];
			try {
				URL url = new URL(entry.getValue());
				URLConnection con = url.openConnection();
				// 设置超时间为3秒
				con.setConnectTimeout(3 * 1000);
				// 防止屏蔽程序抓取而返回403错误
				con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
				InputStream is = con.getInputStream();
				isMap.put(fileName, is);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return isMap;
	}


	/*添加压缩文件*/
	private void addToZip(InputStream is, ZipOutputStream zipOut, String fileName) {
		try{
			ZipEntry entry = new ZipEntry(fileName);
			zipOut.putNextEntry(entry);
			int len;
			byte[] buffer = new byte[1024];
			while ((len = is.read(buffer)) > 0) {
				zipOut.write(buffer, 0, len);
			}
			zipOut.closeEntry();
			is.close();
		}catch (Exception e){
			e.printStackTrace();
		}
	}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值