java url压缩_JAVA 根据Url把多文件打包成ZIP下载实例

需求:

文件批量下载,支持断点续传。支持多线程下载。

使用JS能够实现批量下载,能够提供接口从指定url中下载文件并保存在本地指定路径中。

服务器不需要打包。客户要求不打包下载,而是直接批量下载。因为文件比较多,打包下载比较麻烦,下载下来后也需要手动解压。

能够下载到本地指定目录,而不是浏览器默认的下载目录。

支持大文件断点下载。比如下载10G的文件。

PC端全平台支持。Windows,macOS,Linux

全浏览器支持。ie6,ie7,ie8,ie9,ie10,ie11,edge,firefox,chrome,safari

压缩文件代码工具类:

publicclassUrlFilesToZip{

privatestaticfinalLogger logger=LoggerFactory.getLogger(UrlFilesToZip.class);

//根据文件链接把文件下载下来并且转成字节码

publicbyte[]getImageFromURL(String urlPath){

byte[]data=null;

InputStream is=null;

HttpURLConnection conn=null;

try{

URL url=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(MalformedURLException e){

logger.error(“MalformedURLException”,e);

}catch(IOException e){

logger.error(“IOException”,e);

}finally{

try{

if(is!=null){

is.close();

}

}catch(IOException e){

logger.error(“IOException”,e);

}

conn.disconnect();

}

returndata;

}

publicbyte[]readInputStream(InputStream is){

ByteArrayOutputStream baos=newByteArrayOutputStream();

byte[]buffer=newbyte[1024];

intlength=–1;

try{

while((length=is.read(buffer))!=–1){

baos.write(buffer,0,length);

}

baos.flush();

}catch(IOException e){

logger.error(“IOException”,e);

}

byte[]data=baos.toByteArray();

try{

is.close();

baos.close();

}catch(IOException e){

logger.error(“IOException”,e);

}

returndata;

}

}

控制层代码:

publicvoidfilesdown(HttpServletResponse response){

try{

String filename=newString(“xx.zip”.getBytes(“UTF-8”),“ISO8859-1”);//控制文件名编码

ByteArrayOutputStream bos=newByteArrayOutputStream();

ZipOutputStream zos=newZipOutputStream(bos);

UrlFilesToZip s=newUrlFilesToZip();

intidx=1;

for(String oneFile: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);//设置文件名

OutputStream os=response.getOutputStream();

os.write(bos.toByteArray());

os.close();

}catch(FileNotFoundException ex){

logger.error(“FileNotFoundException”,ex);

}catch(Exception ex){

logger.error(“Exception”,ex);

}

}

注意:

String filename=newString(“xx.zip”.getBytes(“UTF-8”),“ISO8859-1”);//包装zip文件名不发生乱码。

2.一定要注意,否则会发生下载下来的压缩包无法解压。在给OutputStream 传值之前,一定要先把ZipOutputStream的流给关闭了!

效果:

367dd299d3e35826f3791de1690b2616.png

总结

以上所述是小编给大家介绍的JAVA 根据Url把多文件打包成ZIP下载,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值