JAVA 根據(jù)Url把多文件打包成ZIP下載實(shí)例
壓縮文件代碼工具類:
public class UrlFilesToZip { private static final Logger logger = LoggerFactory.getLogger(UrlFilesToZip.class); //根據(jù)文件鏈接把文件下載下來(lái)并且轉(zhuǎn)成字節(jié)碼 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");// 設(shè)置強(qiáng)制下載不打開(kāi) response.addHeader("Content-Disposition", "attachment;fileName=" + filename);// 設(shè)置文件名 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文件名不發(fā)生亂碼。
2.一定要注意,否則會(huì)發(fā)生下載下來(lái)的壓縮包無(wú)法解壓。在給OutputStream 傳值之前,一定要先把ZipOutputStream的流給關(guān)閉了!
總結(jié)
以上所述是小編給大家介紹的JAVA 根據(jù)Url把多文件打包成ZIP下載,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
執(zhí)行java請(qǐng)求時(shí)導(dǎo)致在腳本執(zhí)行結(jié)束時(shí)JVM無(wú)法退出
這篇文章主要介紹了執(zhí)行java請(qǐng)求,導(dǎo)致在腳本執(zhí)行結(jié)束時(shí)JVM無(wú)法退出問(wèn)題,本文通過(guò)原因分析給出解決方案,需要的朋友可以參考下2020-02-02Java布爾值Boolean和boolean之間轉(zhuǎn)換實(shí)例用法
在本篇文章里小編給大家整理的是一篇關(guān)于Java布爾值Boolean和boolean之間轉(zhuǎn)換實(shí)例用法內(nèi)容,有需要的朋友們跟著學(xué)習(xí)參考下。2021-06-06SpringBoot實(shí)現(xiàn)郵件發(fā)送的示例代碼
電子郵件是—種用電子手段提供信息交換的通信方式,是互聯(lián)網(wǎng)應(yīng)用最廣的服務(wù)。本文詳細(xì)為大家介紹了SpringBoot實(shí)現(xiàn)發(fā)送電子郵件功能的示例代碼,需要的可以參考一下2022-04-04Mybatis反向工程出現(xiàn)BigDecimal類型問(wèn)題及解決
這篇文章主要介紹了Mybatis反向工程出現(xiàn)BigDecimal類型問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09手寫(xiě)一個(gè)@Valid字段校驗(yàn)器的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何手寫(xiě)一個(gè)@Valid字段校驗(yàn)器,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定幫助,需要的可以參考一下2022-07-07