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

来源:互联网 发布:淘宝买iphonex靠谱吗 编辑:程序博客网 时间:2024/04/29 23:04

压缩文件代码工具类:

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的流给关闭了!

原创粉丝点击