创建包含多部分文件上载的发布请求

时间:2009-12-24 10:11:53

标签: java http multipartform-data multipart

我正在编写一个简单的片段,发送简单的帖子请求。

目前我正在构建请求:

    // 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 个答案:

答案 0 :(得分:3)

目前,您根本没有使用HTTP。如果您打算进行POST,首先需要确保发送正确的标题等,这样您实际上就是在进行HTTP连接。您需要遵循RFC 1867(http://tools.ietf.org/html/rfc1867)将文件内容正确编码到POST中。这并不容易,这就是为什么有些库可以帮到你。所以我不得不问:为什么要避免使用HttpClient?我一直用它来达到这个目的。它可靠,完整且高效。你是否缩短(内存/磁盘)空间?

答案 1 :(得分:1)

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

答案 2 :(得分: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);

答案 3 :(得分:0)

此代码段很适合我:Upload files by sending multipart request programmatically

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