java批量下载生成zip压缩包

设计思路:

1.本地先创建一个zip文件

2.将批量下载的文件依次放入zip文件中

3.将zip文件返回给前端

//一、本地先生成zip文件

//要批量下载的文件id数组
String[] ids = new String[] {"1","2"}
byte[] buffer = new byte[1024];
//创建zip
String localZipFile = "D:/temp/test.zip" ;
if(!new File(localZipFile).exists()){
 new File(localZipFile).mkdirs();
}
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(localZipFile));

//依次获取批量下载的文件
for(int i =0; i<ids.length;i++){
    //设置压缩包内的文件的字符编码,不然文件名可能变成乱码(用户为windows系统)
	out.setEncoding("GBK");
    //从数据库中获取文件的路径和文件名,并放入zip文件中
    String fileId = ids[i];
    Map<String,Object> map =exportManagerService.getFjInfo(fileId);
    FileInputStream inStream = new FileInputStream(new File(map.get("path").toString()));
    out.putNextEntry(new ZipEntry(map.get("name").toString()));
    int len;
    //读入需要下载的文件的内容,打包到zip文件  
	while ((len = inStream.read(buffer)) > 0) {  
			out.write(buffer, 0, len);  
	}  
	out.closeEntry();  
	inStream.close();  					
}
out.close();
this.downFile(response,"D:/temp","test.zip");



//二、将本地zip返回给前端
private void downFile(HttpServletResponse response,String FilePath, String str) {
		Map m = new HashMap();
		try {
			
			String path = FilePath +"/"+ str;
			File file = new File(path);
			if (file.exists()) {
				InputStream ins = new FileInputStream(path);
				BufferedInputStream bins = new BufferedInputStream(ins);// 放到缓冲流里面
				OutputStream outs = response.getOutputStream();// 获取文件输出IO流
				BufferedOutputStream bouts = new BufferedOutputStream(outs);
				response.addHeader("content-disposition", "attachment;filename="
						+ java.net.URLEncoder.encode(str, "UTF-8"));
				int bytesRead = 0;
				byte[] buffer = new byte[8192];
				// 开始向网络传输文件流
				while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {
					bouts.write(buffer, 0, bytesRead);
				}
				bouts.flush();// 这里一定要调用flush()方法
				ins.close();
				bins.close();
				outs.close();
				bouts.close();
			}
		} catch (IOException e) {
			m.put("code", "-1");
			m.put("text", "附件下载出错:" + e.getMessage());
			e.printStackTrace();
		}
	}


版权声明:本文为weixin_42488402原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。