zoukankan      html  css  js  c++  java
  • java下载zip文件

    1.参考API可见,Java的JDK中提供一个java.util.zip的接口。其压缩过程主要是通过这两个接口压缩文件或者文件夹;

    java.util.zip.ZipEntry;
    java.util.zip.ZipOutputStream;

    2.功能实现

    1)页面请求方式:

     window.location.href = "/file/do_upload;

    2) web端实现

    @RequestMapping("/do_upload")
    public void test(HttpServletResponse response, String taskId) throws IOException {
        long start = System.currentTimeMillis();
        // 获取附件信息
        List<File> files = fileService.listAllFiles(fileId);
        //判断是否为excel类型文件
        if(CollectionUtils.isEmpty(files)) {
            LOGGER.error("查询无关联图片或者视频");
        } else {
            // 设置文件名
            formatFileName(response, task);
            ZipOutputStream zos = null;
            try {
                zos = new ZipOutputStream(response.getOutputStream());
                for (File srcFile : files) {
                    if (StringUtils.isNotEmpty(srcFile.getFileHbasePath()) && StringUtils.isNotEmpty(srcFile.getFileName())) {
                        // 下载附件
                        byte[] bytes = fastDFSService.downloadFile(srcFile.getFileHbasePath());
                        byte[] buf = new byte[1024];
                        zos.putNextEntry(new ZipEntry(srcFile.getFileName()));
                        int len;
                        ByteArrayInputStream in = new ByteArrayInputStream(bytes);
                        while ((len = in.read(buf)) != -1){
                            zos.write(buf, 0, len);
                        }
                        zos.closeEntry();
                    }
                }
                long end = System.currentTimeMillis();
                System.out.println("压缩完成,耗时:" + (end - start) +" ms");
            } catch (Exception e) {
                throw new RuntimeException("zip error from ZipUtils",e);
            }finally{
                if(zos != null){
                    try {
                        zos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    设置文件名字和响应信息设置

    /**
    * @methodname formatFileName
    * @Description {设置响应信息和格式化附件名字}
    * @author admin
    */
    private void formatFileName(HttpServletResponse response) throws UnsupportedEncodingException {
        String fileName = "附件文字";
        Long actualEndTime = new Date().getTime();
        fileName += actualEndTime + ".zip";
        // 获取浏览器信息
        if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
            fileName = new String(fileName.getBytes("GB2312"),"ISO-8859-1");
        } else {
            // 处理中文文件名的问题
            fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
            fileName = new String(fileName.getBytes("UTF-8"), "GBK");
        }
        // 清除首部的空白行
        response.reset();
        // 设置Response容器的编码
        response.setCharacterEncoding("UTF-8");
        // 不同类型的文件对应不同的MIME类型
        response.setContentType("application/x-msdownload");
        response.setHeader("Content-Disposition","attachment; filename="+fileName);
    }

    参考原文地址:

    获取游览器信息:https://blog.csdn.net/w410589502/article/details/73163383

    压缩文件:https://blog.csdn.net/yunyingxiaoyi/article/details/103407789

  • 相关阅读:
    java MVC设计模式探究——mvc在JAVA应用程序中的应用
    datagridview 的Columns 点击列标题 禁止排序
    组合键事件
    对一段视频,采帧(总结)
    datagridview中加入checkbox列,全选问题
    微软的RDLC报表(转)
    Linq to sql直接执行sql语句(转)
    获取当月的第1天
    AxWindowsMediaPlayer的详细用法
    DataSet
  • 原文地址:https://www.cnblogs.com/blogslee/p/13035263.html
Copyright © 2011-2022 走看看