1. 程式人生 > >傳送http請求,獲取返回的zip包並讀取包內的檔案

傳送http請求,獲取返回的zip包並讀取包內的檔案

//接收http請求並將需要的檔案打包返回
public void mark(HttpServletResponse response) {
		try {
		    response.setContentType("multipart/form-data");
                    //獲取要打包的多個檔案
	    	    File file1 = new File("C:/Users/xhc/Desktop/a/spring-quartz.xml");
	    	    File file2 = new File("C:/Users/xhc/Desktop/a/spring-servlet.xml");
	    	    List<File> fileList = new ArrayList<>();
	    	    fileList.add(file1);
	    	    fileList.add(file2);
	    	    out = response.getOutputStream();
	    	    zos = new ZipOutputStream(out);
	    	    for (File file : fileList) {
	    	    	ZipEntry entry = new ZipEntry(file.getName());
	    	    	zos.putNextEntry(entry);
	    	    	byte [] bytes = new byte[1024];
	    	    	int len;
	    	    	FileInputStream in = new FileInputStream(file);
	    	    	while((len = in.read(bytes)) != -1) {
	    	    		zos.write(bytes, 0, len);
	    	    	}
	    	    	zos.closeEntry();
	    	    	in.close();
				}
	            
			} catch (Exception e) {
				
			}finally {
				if(zos != null) {
					try {
						zos.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
	}
   //傳送http請求,並處理返回的zip包 
public static void multipartRequestForMark(String url, Map<String, String> params, String[] filePath, String[] fileName){
    	HttpPost httpPost = getHttpPost(url, null);
    	MultipartEntityBuilder builder = MultipartEntityBuilder.create().setCharset(UTF_8);
    	String value = "";
    	if (params != null) {
    		for (String key : params.keySet()) {
    			value = (String)params.get(key);
    			if (value == null) value = "";
    			builder.addTextBody(key, value, ContentType.APPLICATION_JSON);
    		}
    	}
    	if ((filePath != null) && (fileName != null) && 
    			(filePath.length == fileName.length)) {
    		for (int i = 0; i < filePath.length; ++i) {
    			builder.addBinaryBody("file" + i, new File(filePath[i]), ContentType.APPLICATION_OCTET_STREAM, fileName[i]);
    		}
    	}
    	HttpEntity multipart = builder.build();
    	httpPost.setEntity(multipart);
    	Map<String, Object> map = new HashMap<>();
    	try {
    		CloseableHttpResponse response = httpclient.execute(httpPost);
    		try { 
    			assertStatus(response);//判斷返回的code是否為200
    			HttpEntity entity = response.getEntity();//從response裡獲取資料實體
	           	InputStream in = entity.getContent();//獲取資料流
	           	Charset c = Charset.forName("UTF-8");
	           	ZipInputStream zin = new ZipInputStream(in, c);//封裝成zip輸入流
	           	BufferedOutputStream bos = null;
	          	ZipEntry ze;
	                //檔案存放地址
	                String path = "C:/Users/xhc/Desktop/b/";
	          	File file = null;
	          	List<File> listFile = new ArrayList<>();
	          	try {
	          	   	while((ze = zin.getNextEntry()) != null) {//迴圈zip輸入流,獲取每一個檔案實體
	          	   		file = new File(path + ze.getName());//生成file(如果檔案路徑不存在,先建立)
	              		        FileOutputStream fos = new FileOutputStream(file);
	              		        int len;
	              		        byte [] bytes = new byte[2048];
	              		        bos = new BufferedOutputStream(fos,2048);
	              		        while((len = zin.read(bytes, 0, 2048)) != -1) {
	              			        bos.write(bytes, 0, len);
	              		        }
	              		        bos.flush();
	              		        bos.close();
	              	        }
	          	   	zin.close();//關閉輸入流
				} catch (Exception e) {
					logger.error("異常 " + e);
				}
    		        } finally {
    			        if (response != null) response.close();  
    		        }
    	    } catch (ClientProtocolException e) {
    		    logger.error("檔案上傳呼叫發生ClientProtocolException異常:" + e);
    	    } catch (IOException e) {
    		    logger.error("檔案上傳呼叫發生IOException異常:{}" + e);
    	    }
    }


相關推薦

傳送http請求獲取返回zip讀取檔案

//接收http請求並將需要的檔案打包返回 public void mark(HttpServletResponse response) { try { response.setContentType("multipart/form-data");

java中使用Apache HttpClient傳送Http請求獲取返回結果

傳送http請求可以寫成一個工具類,HttpClient可以使用連線池建立,這樣的好處是我們可以自己定義一些配置,比如請求超時時間,最大連線數等等。 public class HttpUtil { private static CloseableHttpClient http

Java傳送Http請求解析html返回

宣告:本文系JavaEye網站釋出的原創部落格文章,未經作者書面許可,嚴禁任何網站轉載本文,否則必將追究法律責任! 今天是2008年7月7日星期一,下午一直在學校做個人開始頁面。因為離不開google的翻譯,所以想把google的翻譯整合到我的開始頁面中來,於是乎就遇到了一個

JAVA傳送HTTP請求接受返回內容

JDK 中提供了一些對無狀態協議請求(HTTP )的支援,下面我就將我所寫的一個小例子(元件)進行描述:  首先讓我們先構建一個請求類(HttpRequester )。  該類封裝了 JAVA 實現簡單請求的程式碼,如下:package atco.http; import java.io.BufferedR

jmeter 傳送http請求獲取到的請求的訂單資訊儲存到檔案

有一個任務,需要頻繁傳送訂單請求,並分析訂單請求中有沒有存在重複訂單號,思路是用jmeter 傳送http請求,使用正則表示式獲取到訂單號,並把訂單號和執行緒號作為引數提供給java請求,在java請求中把訂單號寫到包括有執行緒號的命名檔案中。完成出來的樣子是這樣的 步驟如下: 1、Jme

使用HttpClient傳送http請求解析從伺服器端返回的資料

使用Apache的httpclient包可以模擬HTTP請求的傳送, get和post均可以。最方便的地方就是請求struts等web框架進行測試,省去了做測試頁面的差事。import java.io.IOException; import java.io.InputStr

[python]socket傳送http請求非阻塞io的一個例子

#通過非阻塞io實現http請求 import socket from urllib.parse import urlparse #使用非阻塞io完成http請求 def get_url(url): #通過socket請求html url

JAVA傳送http請求呼叫http介面與方法

1.傳送POST請求,無引數名呼叫。 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import

Java 傳送http請求上傳檔案

package wxapi.WxHelper; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.F

HttpClient 傳送Json請求結果返回Json

public static JSONObject post(String url,JSONObject json){ HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(

【Oracle】UTL_HTTP 傳送http請求定時任務job+儲存過程PROCEDURE

總覺得這種方式心裡用著沒譜,因為對他並不瞭解。比如是否涉及到資源釋放啊,異常捕獲啊,是否能穩定高併發執行啊。大家也可以看一下  幫我優化優化。 首先1·要使用 --開啟Oracle ACL許可權 /*

java 實現ajax傳送http請求直接訪問伺服器

 //-----------------------------客戶端請求時需要把中文轉碼 --------------------- /**       * 向指定URL傳送POST方法的請求   

程式碼中傳送http請求 java.lang.IllegalArgumentException: Illegal character in query at index...非法字元錯誤解決辦法

產生原因:url中有漢字或特殊字元(非字母和數字的字元),沒有轉碼。 解決辦法:將帶有特殊字元或漢字的引數進行轉碼,再放入url傳送即可。 例如:param1 = URLEncoder.encode(param1, "UTF-8");

java傳送http請求獲取響應結果【工具系列】

import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.NameValuePair; import org.apache.log4j.Logger;

Java在傳送HTTP請求遇到身份驗證無法獲取到response內容的解決方法

問題描述: 有些網站在接受HTTP請求時會先讓你進行身份認證,所以在用Java傳送HTTP請求時會出現401錯誤碼,無法正常獲取到想要的內容。 解決方法: 我以傳送get請求為例,說明解決方法。 public static String getMethod(Strin

axios傳送post請求thinkphp獲取不到引數

我使用的是vue-cli 可能是傳送的資料格式不對,需要新增頭資訊(content-type)。引入qs外掛,用qs轉變資料格式。 import qs from 'qs'; axios.post('/api/xxx/xxx/xxx?'+qs.stringify(newChild),

Python傳送Http請求提交中文或者符號中文編碼問題的解決方法

前言 博主最近在用python3比較強大的Django開發web的時候,發現一些url的編碼問題,在瀏覽器提交請求api時,如果url中包含漢子,就會被自動編碼掉。呈現的結果是 ==> %xx%xx%xx。如果出現3個百分號為一個原字元則為utf8編碼,如果2個百分號則為gb2312編碼。

Java後臺傳送post請求接收返回資訊

/** * 向指定的 URL傳送遠端POST方法的請求 * @param url傳送請求的 URL * @param json請求引數, * @return 所代表遠端資源的響應結果 */ public static JSONObject sendPost(String

javaweb總結(九)--從jsp頁面傳送ajax請求servlet接受引數返回json資料

來自:https://blog.csdn.net/yanghan1222/article/details/78447231   今天遇到了問題把我難住了,解決之後就趕緊來記下來 這是一個很簡單的更新使用者的問題 先來看看專案所需jar包 接下來就是jsp頁面的東西

java 傳送http請求 返回字串 再進行解析(略)

package taobao.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.InputStreamR