java压缩zip格式文件下载

1.页面js发送后台请求

	window.location.href = basePath+"printWord/zipDownload?ids="+ ids + "&roadType=" + roadType+"&zqCode="+zqCode+"&zqName="+zqName;

 

2.后台controller接收参数,查询文件,组织文件下载输出流

@RequestMapping(value = "/zipDownload", produces = "text/html;charset=UTF-8")
	public void zipDownload(HttpServletRequest request, HttpServletResponse response) throws Exception {
		try {
			String zqCode = request.getParameter("zqCode");     //政区编码
			String roadType = request.getParameter("roadType"); //路线类型
			String ids = request.getParameter("ids");           //条目id
			String zqName = request.getParameter("zqName");           //条目id
			String fileTitle = "支撑文件";
		    if("H".equals(roadType)) {
		    	fileTitle += "(高速公路)";
		    }else {
		    	fileTitle += "(普通国省道)";
		    }
			SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
			String nowDate = formatter.format(new Date());
		    fileTitle += "-"+zqName+"-"+nowDate+".zip";
			printWordService.zipDownload(zqCode,roadType,ids,request,response,fileTitle);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

3.service层处理文件

(1)service后台
public void zipDownload(String zqCode, String roadType, String ids, HttpServletRequest request, HttpServletResponse response, String zipName) {
        ZipOutputStream zipos = null;
        DataOutputStream os = null;
        InputStream is = null;
		try {
            response.reset();
			zipName = new String(URLEncoder.encode(zipName, "UTF-8").getBytes(), "ISO-8859-1");
	        response.setHeader("Content-Disposition", "attachment;fileName=\"" + zipName + "\"");
	        response.setContentType("application/octet-stream; charset=UTF-8");  
            zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
            zipos.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法 
            MinioClient minioClient = FileUtils.getInstance();
            List<ScoreFile> fileList = getFileListByCondi(zqCode,roadType,ids);//通过条件查询到的文件数据
            if(null != fileList && fileList.size() > 0) {
    			for(int i = 0;i < fileList.size();i++) {
    				ScoreFile scoreFile = fileList.get(i);
    				String packagePathName = scoreFile.getItemCode()+ File.separator + scoreFile.getFileName();
    	            try {
    	            	zipos.putNextEntry(new ZipEntry(packagePathName));
    	                os = new DataOutputStream(zipos);
    	                is = minioClient.getObject(scoreFile.getFileDirectory(),
    	                		scoreFile.getFilePath() + scoreFile.getFileNewName());
    	                byte[] b = new byte[100];
    	                int length = 0;
    	                while((length = is.read(b))!= -1){
    	                    os.write(b, 0, length);
    	                }
    	            } catch (IOException e) {
    	                e.printStackTrace();
    	            } 
    			}
    			is.close();
                os.flush();
                os.close();
                zipos.close();
                System.out.println("下载完成-----------------");
            }else {
            	System.out.println("查询不到下载文件-----------------");
            }
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if (is != null) {
				try {
					is.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			if (os != null) {
				try {
					os.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (zipos != null) {
				try {
					zipos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		} 
     
		
	}

   (2) FileUtils工具类配置连接minio配置:
	private static volatile MinioClient minioClient = null;  
	public static String minioUrl;    
	public static String minioUsername; 
	public static String minioPassword; 
	@Value("${system.minioUrl}")  
	private String minioUrlTmp;
	
	@Value("${system.minioUsername}")  
	private String minioUsernameTmp;
	
	@Value("${system.minioPassword}")  
	private String minioPasswordTmp;
	
	
	@PostConstruct  
	public void init() throws Exception {  
		minioUrl = minioUrlTmp;  
		minioUsername = minioUsernameTmp;
		minioPassword = minioPasswordTmp;
	}  
	

    //初始化minio链接

	public static MinioClient getInstance() {
        if (minioClient == null) {  
            synchronized (FileUtils.class) {  
                if (minioClient == null) {  
                	try {
                		//new FileUtils(); 
                		minioClient = new MinioClient(minioUrl,minioUsername,minioPassword);
					} catch (Exception e) {
						e.printStackTrace();
					}
                }  
            }  
        }  
        return minioClient;  
    } 

(3)maven注入minio的jar包
		<dependency>
		    <groupId>io.minio</groupId>
		    <artifactId>minio</artifactId>
		    <version>3.0.12</version>
		</dependency> 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值