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公地。

4

4 回答 4

3

目前,您根本没有使用 HTTP。如果您打算进行 POST,您需要做的第一件事是确保发送正确的标头等,因此您实际上是在进行 HTTP 连接。您需要遵循 RFC 1867 ( https://www.rfc-editor.org/rfc/rfc1867 ) 将文件内容正确编码到您的 POST 中。这并不容易,这就是为什么有图书馆可以为你做这件事的原因。所以我不得不问:为什么要避免使用HttpClient?我一直将它用于此目的。它可靠、完整且高效。您是否缺少(内存/磁盘)空间?

于 2009-12-24T10:20:12.570 回答
1

至此,您需要使用RFC 1687RFC 2388中指定的格式的数据构造一个输出流。工作量很大,我不打算发布启动代码示例,抱歉 :) 然而,RFC 包含清晰的信息和几个示例数据应该是什么样子。这是绝对可行的。

于 2009-12-24T10:18:41.090 回答
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);
于 2012-04-02T11:13:10.000 回答
0

这段代码对我很有帮助:Upload files by send multipart request programmatically

它没有任何外部依赖,只有大约 150 行代码,包括注释,恕我直言,它比 Apache HttpClient 库更容易处理。

于 2016-12-10T16:32:09.870 回答