2009-12-24 57 views
0

我在寫一個簡單的代碼片段,它發送一個簡單的發佈請求。創建包括多部分文件上傳的發佈請求

目前我建設的要求,像這樣:

// Construct data 
    String data = URLEncoder.encode("param1", "UTF-8") + "=" + URLEncoder.encode("val1", "UTF-8"); 
    data += "&" + URLEncoder.encode("param2", "UTF-8") + "=" + URLEncoder.encode("val2", "UTF-8"); 

    // Send data 
    URL url = new URL("http://server:8080/servlet/upload"); 
    URLConnection conn = url.openConnection(); 
    conn.setDoOutput(true); 
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
    wr.write(data); 
    wr.flush(); 

    // do stuff with response.... 

這工作,截至目前。但我需要添加文件上傳作爲多部分POST請求。 我該怎麼做?如果可能,我想避免使用公共地方的HttpClient

回答

3

目前,您根本沒有使用HTTP。如果你打算做一個POST,你需要做的第一件事就是確保你發送了正確的頭文件等,所以你實際上正在使用HTTP連接。您需要遵循RFC 1867(http://tools.ietf.org/html/rfc1867)將文件內容正確編碼到您的POST中。這並不容易,這就是爲什麼有這樣的圖書館爲你做這些。所以我不得不問:爲什麼要避免HttpClient?我一直用它來達到這個目的。它是可靠的,完整的和高性能的。 (內存/磁盤)空間不足?

+0

我確實有一些集成問題,但如果實現請求編碼更容易,我將使用外部庫。謝謝 :) – 2009-12-24 11:21:39

1

至此,您需要使用RFC 1687RFC 2388中指定的格式構造輸出流。這是很多工作,我不會發布啓動代碼示例,對不起:)然而,RFC包含清晰的信息和幾個示例數據應該如何。這絕對是可行的。

+0

超鏈接是正確的,但超文本不是。 :) – 2009-12-24 10:23:43

+0

爲沒有HTML部分的同一故事添加RFC 2388 :) – BalusC 2009-12-24 10:37:22

0

試試這個,因爲這曾在我的情況

File f = new File(filePath); 
PostMethod filePost = new PostMethod(url); 
Part[] parts = { new FilePart("file", f) }; 
filePost.setRequestEntity(new MultipartRequestEntity(parts, 
filePost.getParams())); 
HttpClient client = new HttpClient(); 
status = client.executeMethod(filePost); 
logger.info("upload status: " + status); 
相關問題