java项目(ssm框架)实现批量下载图片并打包压缩为zip文件

为什么80%的码农都做不了架构师?>>>   hot3.png

jsp


		 证件下载

Controller.java 

/**
		 *文件压缩下载
		 *billname:文件名
		 *filename:文件存放路径
		 */
		 @RequestMapping("/zipfileDownload_workerCard")
		 public void zipfileDownload_workerCard(HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException, IOException{
		        //响应头的设置
		        response.reset();
		        response.setCharacterEncoding("utf-8");
		        response.setContentType("multipart/form-data");
		       
		        //设置压缩包的名字
		         //解决不同浏览器压缩包名字含有中文时乱码的问题
		        HttpSession session = request.getSession();
		        
		        String billname ="workerCard-"+session.getAttribute("projectWorktypeId");
		        String downloadName = billname+".zip";
		        //返回客户端浏览器的版本号、类型
		        String agent = request.getHeader("USER-AGENT");  
		        try {
		        	//针对IE或者以IE为内核的浏览器:  
		            if (agent.contains("MSIE")||agent.contains("Trident")) {
		                downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");
		            } else {
		            	//非IE浏览器的处理:
		                downloadName = new String(downloadName.getBytes("UTF-8"),"ISO-8859-1");
		            }
		        } catch (Exception e) {
		            e.printStackTrace();
		        }
		        response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");
 
		        //设置压缩流:直接写入response,实现边压缩边下载
		        ZipOutputStream zipos = null;
		        try {
		            zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
		            zipos.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法 
		        } catch (Exception e) {
		            e.printStackTrace();
		        }
 
		        //循环将文件写入压缩流
		        DataOutputStream os = null;
		        Worker worker = new Worker();
		        worker.setProjectWorktypeId((Integer)session.getAttribute("projectWorktypeId"));
            //从数据库中取出要下载的图片路径、并循环写入压缩
		        List workerList = workerService.findAllWorkerByWhere(worker);
		        for (Worker worker2 : workerList) {
		        	String filename =worker2.getWorkerScanFront();
		        	String removeStr = "/upload/workerCard";
		        	filename = filename.replace(removeStr, "");//去掉相对路径中的两个目录路径
		        		String modipath = request.getSession().getServletContext().getRealPath("/upload/workerCard"+filename);
		        		File file = new File(modipath);
		        		if(file.exists()){
		        			try {
		        				//添加ZipEntry,并ZipEntry中写入文件流
		        				//这里,加上i是防止要下载的文件有重名的导致下载失败
		        				zipos.putNextEntry(new ZipEntry(filename));
		        				os = new DataOutputStream(zipos);
		        				InputStream is = new FileInputStream(file);
		        				byte[] b = new byte[100];
		        				int length = 0;
		        				while((length = is.read(b))!= -1){
		        					os.write(b, 0, length);
		        				}
		        				is.close();
		        				zipos.closeEntry();
		        			} catch (IOException e) {
		        				e.printStackTrace();
		        			} 
		        		}
		    	}
			     //关闭流
		        try {
		            os.flush();
		            os.close();
		            zipos.close();
		        } catch (IOException e) {
		            e.printStackTrace();
		        }    
 
		    }

 

转载于:https://my.oschina.net/8824/blog/2876320

你可能感兴趣的:(java项目(ssm框架)实现批量下载图片并打包压缩为zip文件)