批量下載下傳檔案,用程式打成zip壓縮包在下載下傳
前台傳來要下載下傳的url數組
@RequestMapping(value = "/download",method = RequestMethod.POST)
public void download(HttpServletResponse response,String [] filePathList) throws IOException{
// 通過response對象擷取OutputStream流
OutputStream os = response.getOutputStream();
//擷取zip的輸出流
ZipOutputStream zos = new ZipOutputStream(os);
//定義輸入流
BufferedInputStream bis = null;
try {
//循環url數組
for (String path : filePathList) {
//通過url位址擷取連接配接
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//設定逾時間為3秒
conn.setConnectTimeout(3*1000);
//防止屏蔽程式抓取而傳回403錯誤
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
conn.setRequestMethod("GET");
conn.connect();
//通過連接配接得到輸入流
InputStream inputStream = conn.getInputStream();
//設定壓縮後的zip檔案名
String sourceFilePath = "zip.zip";
//設定content-disposition響應頭控制浏覽器彈出儲存框,若沒有此句則浏覽器會直接打開并顯示檔案。
//中文名要經過URLEncoder.encode編碼,否則雖然用戶端能下載下傳但顯示的名字是亂碼
response.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode(sourceFilePath, "UTF-8"));
byte[] buf = new byte[8192];
int len = 0;
//建立ZIP實體,并添加進壓縮包
ZipEntry zipEntry = new ZipEntry(fileName);
zos.putNextEntry(zipEntry);
bis = new BufferedInputStream(inputStream, 1024*10);
while ((len = bis.read(buf)) > 0) {
//使用OutputStream将緩沖區的資料輸出到用戶端浏覽器
zos.write(buf, 0, len);
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(null != zos) zos.close();
if(null != bis) bis.close();
}
}