欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVA 根据Url把多文件打包成ZIP下载实例

程序员文章站 2024-02-22 09:08:22
压缩文件代码工具类: public class urlfilestozip { private static final logger logger = lo...

压缩文件代码工具类:

public class urlfilestozip {
 private static final logger logger = loggerfactory.getlogger(urlfilestozip.class);
 //根据文件链接把文件下载下来并且转成字节码
 public byte[] getimagefromurl(string urlpath) {
  byte[] data = null;
  inputstream is = null;
  httpurlconnection conn = null;
  try {
   url url = new url(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();
  }
  return data;
 }
 public byte[] readinputstream(inputstream is) {
  bytearrayoutputstream baos = new bytearrayoutputstream();
  byte[] buffer = new byte[1024];
  int length = -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);
  }
  return data;
 }
}

控制层代码:

public void filesdown(httpservletresponse response){
 try {
   string filename = new string("xx.zip".getbytes("utf-8"), "iso8859-1");//控制文件名编码
   bytearrayoutputstream bos = new bytearrayoutputstream();
   zipoutputstream zos = new zipoutputstream(bos);
   urlfilestozip s = new urlfilestozip();
   int idx = 1;
   for (string onefile : urls) {
    zos.putnextentry(new zipentry("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);
  }
 }
 }

注意:

1. string filename = new string(“xx.zip”.getbytes(“utf-8”), “iso8859-1”);包装zip文件名不发生乱码。

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

总结

以上所述是小编给大家介绍的java 根据url把多文件打包成zip下载,希望对大家有所帮助