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

