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下载,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!