批量下载文件----压缩后再下载

 把所需要的的附件全部下载下来放在指定的位置,然后对此位置上的附件全部打包成压缩文件,然后再下载下来。方便用户查看。

public IZrarResponse downloadZdxjr(IZrarRequest req) throws ParseException, ParseException, IOException {
        IZrarResponse res = new ZrarResponse();
        List list = "具体的获取数据的方法---需要根据项目需求写";
        String oid = "";//这三个是项目所需要的值
        String wjmc = "";
        String unitname = "";
        String url = null;
        JsonResult<FileObject> result = new JsonResult();
        //从系统配置文件获取路径位置
        String realPath0 = PropertyManager.getProperty("CommonUploadFileUrl", new String[0]);
        String realPath = realPath0.replace("\\", "/");
        if (realPath.lastIndexOf("/") == realPath.length() - 1) {
            realPath = realPath + "ssfa/";
        } else {
            realPath = realPath + "/ssfa/";
        }
        //要是文件路径已存在则删除再新建
        File f = new File(realPath);
        if (f.exists()) {
            FileUtils.deleteDirectory(f);
            f.mkdirs();
        } else {
            f.mkdirs();
        }

        for (int i = 0; i < list.size(); i++) {
            Map map = (Map) list.get(i);
            oid = (String) map.get("oid");
            wjmc = (String) map.get("wjmc");
            unitname = (String) map.get("unitname");
            if (StringUtil.isNull(oid)) {
                result.setErrorMsg("oid can not be null");
                return res.addResHtml(result.toJson());
            }
            HttpServletRequest request = req.getHttpServletRequest();
            //获取地址请求下载附件
            url = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/oss/download/" + oid + "?direct=1";
            //获取附件信息
            getFile(url, "(" + unitname + ")" + wjmc, realPath);
        }
        String currentTime = DateUtils.getCurrentTime();
        currentTime = currentTime.replaceAll("-", "").replaceAll(" ", "").replaceAll(":", "");
        //压缩文件
        compressToZip(realPath, realPath0, "实施方案" + currentTime + ".zip");
        //下载压缩后的文件
        res.addStream(new File(realPath0 + "实施方案" + currentTime + ".zip"));
        return res;
    }
/**
     * @Description : 获取附件文件 并写入指定位置
     * @Author: 
     * @Date: 2022/4/22 15:42
     */
    private boolean getFile(String urlstr, String filename, String filepath) {
        InputStream in = null;
        HttpURLConnection conn = null;
        FileOutputStream os = null;
        try {
            URL url = new URL(urlstr);
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(60000);
            in = conn.getInputStream();
            os = new FileOutputStream(filepath + filename);
            byte[] buf = new byte[8 * 1024];
            int len;

            while ((len = in.read(buf)) != -1) {
                os.write(buf, 0, len);
            }
            os.flush();
            if (os instanceof FileOutputStream) {
                ((FileOutputStream) os).getFD().sync();
            }
            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            if (null != in) {
                try {
                    in.close();
                } catch (IOException e) {

                }
            }
            if (null != conn) {
                conn.disconnect();
            }
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {

                }
            }
        }
    }
/**
     * @param sourceFilePath 源文件路径
     * @param zipFilePath    压缩后文件存储路径
     * @param zipFilename    压缩文件名
     * @Description :压缩文件
     * @Author: 
     * @Date: 2022/4/22 15:48
     */
    public static void compressToZip(String sourceFilePath, String zipFilePath, String zipFilename) {
        File sourceFile = new File(sourceFilePath);
        File zipPath = new File(zipFilePath);
        if (!zipPath.exists()) {
            zipPath.mkdirs();
        }
        File zipFile = new File(zipPath + File.separator + zipFilename);
        try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
            writeZip(sourceFile, "", zos);
            // 文件压缩完成后,删除被压缩文件
            // boolean flag = deleteDir(sourceFile);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage(), e.getCause());
        }
    }
/**
     * @param file       源文件目录
     * @param parentPath 压缩文件目录
     * @param zos        文件流
     * @Description : 遍历所有文件,压缩
     * @Author: 
     * @Date: 2022/4/22 15:49
     */
    public static void writeZip(File file, String parentPath, ZipOutputStream zos) {
        if (file.isDirectory()) {
            // 目录
            parentPath += file.getName() + File.separator;
            File[] files = file.listFiles();
            for (File f : files) {
                writeZip(f, parentPath, zos);
            }
        } else {
            // 文件
            try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
                // 指定zip文件夹
                ZipEntry zipEntry = new ZipEntry(parentPath + file.getName());
                zos.putNextEntry(zipEntry);
                int len;
                byte[] buffer = new byte[1024 * 10];
                while ((len = bis.read(buffer, 0, buffer.length)) != -1) {
                    zos.write(buffer, 0, len);
                    zos.flush();
                }
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e.getMessage(), e.getCause());
            }
        }
    }
/**
	 * 删除文件夹
	 *
	 * @param dir
	 * @return
	 */
public static boolean deleteDir(File dir) {
		if (dir.isDirectory()) {
			String[] children = dir.list();
			for (int i = 0; i < children.length; i++) {
				boolean success = deleteDir(new File(dir, children[i]));
				if (!success) {
					return false;
				}
			}
		}
		// 删除空文件夹
		return dir.delete();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值