JAVA 根据Url把多文件打包成ZIP下载实例
压缩文件代码工具类:
publicclassUrlFilesToZip{ privatestaticfinalLoggerlogger=LoggerFactory.getLogger(UrlFilesToZip.class); //根据文件链接把文件下载下来并且转成字节码 publicbyte[]getImageFromURL(StringurlPath){ byte[]data=null; InputStreamis=null; HttpURLConnectionconn=null; try{ URLurl=newURL(urlPath); conn=(HttpURLConnection)url.openConnection(); conn.setDoInput(true); //conn.setDoOutput(true); conn.setRequestMethod("GET"); conn.setConnectTimeout(6000); is=conn.getInputStream(); if(conn.getResponseCode()==200){ data=readInputStream(is); }else{ data=null; } }catch(MalformedURLExceptione){ logger.error("MalformedURLException",e); }catch(IOExceptione){ logger.error("IOException",e); }finally{ try{ if(is!=null){ is.close(); } }catch(IOExceptione){ logger.error("IOException",e); } conn.disconnect(); } returndata; } publicbyte[]readInputStream(InputStreamis){ ByteArrayOutputStreambaos=newByteArrayOutputStream(); byte[]buffer=newbyte[1024]; intlength=-1; try{ while((length=is.read(buffer))!=-1){ baos.write(buffer,0,length); } baos.flush(); }catch(IOExceptione){ logger.error("IOException",e); } byte[]data=baos.toByteArray(); try{ is.close(); baos.close(); }catch(IOExceptione){ logger.error("IOException",e); } returndata; } }
控制层代码:
publicvoidfilesdown(HttpServletResponseresponse){ try{ Stringfilename=newString("xx.zip".getBytes("UTF-8"),"ISO8859-1");//控制文件名编码 ByteArrayOutputStreambos=newByteArrayOutputStream(); ZipOutputStreamzos=newZipOutputStream(bos); UrlFilesToZips=newUrlFilesToZip(); intidx=1; for(StringoneFile:urls){ zos.putNextEntry(newZipEntry("profile"+idx); byte[]bytes=s.getImageFromURL(oneFile); zos.write(bytes,0,bytes.length); zos.closeEntry(); idx++; } zos.close(); response.setContentType("application/force-download");//设置强制下载不打开 response.addHeader("Content-Disposition","attachment;fileName="+filename);//设置文件名 OutputStreamos=response.getOutputStream(); os.write(bos.toByteArray()); os.close(); }catch(FileNotFoundExceptionex){ logger.error("FileNotFoundException",ex); }catch(Exceptionex){ logger.error("Exception",ex); } } }
注意:
1.Stringfilename=newString(“xx.zip”.getBytes(“UTF-8”),“ISO8859-1”);包装zip文件名不发生乱码。
2.一定要注意,否则会发生下载下来的压缩包无法解压。在给OutputStream传值之前,一定要先把ZipOutputStream的流给关闭了!
总结
以上所述是小编给大家介绍的JAVA根据Url把多文件打包成ZIP下载,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!