天天看點

批量下載下傳檔案,打包成zip壓縮包

批量下載下傳檔案,用程式打成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();  
	}  
}