zoukankan      html  css  js  c++  java
  • jsp下载文件夹的解决方案

    需求:

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

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

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

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

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

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

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

    压缩文件代码工具类:

    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);

        }

    }

    注意:

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

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

    效果:

    总结

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

    详细配置信息可以参考我写的这篇文章:http://blog.ncmem.com/wordpress/2019/08/28/java%e6%89%b9%e9%87%8f%e4%b8%8b%e8%bd%bd/

  • 相关阅读:
    JS中级二
    JS中级一
    JS入门八
    JS入门七
    JS入门六
    JS入门五
    JS入门四
    JS入门三
    JS入门二
    JS入门1
  • 原文地址:https://www.cnblogs.com/songsu/p/13445341.html
Copyright © 2011-2022 走看看