多个文件根据下载地址压缩成zip下载

392 阅读1分钟

多个文件根据下载地址压缩成zip下载

	/**
     * 多个文件根据下载地址压缩成zip下载
     */
	public void zipDownload(List<String> urlList, HttpServletResponse response)  {
        if (CollectionUtils.isEmpty(urlList)) {
            return;
        }
		// 下载的zip文件名称
        String zipFileName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + ".zip";
        ServletOutputStream outputStream = null;
        try {
            zipFileName = new String(zipFileName.getBytes("UTF-8"),"ISO-8859-1");

            response.setContentType("application/octet-stream;charset=UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename="+ zipFileName);
            response.addHeader("Pargam", "no-cache");
            response.addHeader("Cache-Control", "no-cache");
            // 输出文件流
            outputStream = response.getOutputStream();
            ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);

            // 根据地址获取文件然后压缩
            for (String url : urlList) {
                if (StringUtils.isBlank(url)) {
                    continue;
                }
                // 根据文件url获取文件输入流
                InputStream inputStream = this.HttpGetInputStream(url);
                if (inputStream == null) {
                    continue;
                }

                zipOutputStream.putNextEntry(new ZipEntry(UUID.randomUUID() + ".pdf"));

                BufferedInputStream bis = new BufferedInputStream(inputStream);
                byte[] buffer = new byte[10 * 1024 * 1024]; // byte数据接受文件的数据
                int len;
                while ((len = bis.read(buffer)) != -1) {
                    zipOutputStream.write(buffer, 0, len);
                }
                // 关闭当前的zip
                zipOutputStream.closeEntry();

                /* 关闭流 */
                bis.close();
                inputStream.close();
            }

            zipOutputStream.flush();
            zipOutputStream.close();

        } catch (Exception e) {
            log.error("压缩zip文件失败");
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

	/**
     * 根据url下载文件
     * @param GetUrl
     * @return
     */
	public InputStream HttpGetInputStream(String GetUrl) {
        /* 链接 */
        HttpURLConnection connection = null;
        //
        InputStream io = null;
        try {
            connection = (HttpURLConnection) new URL(GetUrl).openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(30000);
            connection.setReadTimeout(30000);
            connection.connect();
            int code = connection.getResponseCode();
            if (!(code == 200)) {
                return null;
            }
            io = connection.getInputStream();
            return io;
        } catch (Exception e) {
            e.printStackTrace();
            if (connection != null) {
                connection.disconnect();
            }
            return null;
        }
    }