2009-12-24 134 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); 
相关问题