【问题标题】:Creating a post request including a multipart file upload创建一个包含多部分文件上传的发布请求
【发布时间】:2009-12-24 10:11:53
【问题描述】:

我正在编写一个简单的 sn-p,它发送一个简单的 post 请求。

目前我正在构建这样的请求:

    // 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

【问题讨论】:

    标签: java http multipartform-data multipart


    【解决方案1】:

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

    【讨论】:

    • 我确实有一些集成问题,但如果实现请求编码更容易,我将使用外部库。谢谢:)
    【解决方案2】:

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

    【讨论】:

    • 为同一故事添加了 RFC 2388,但没有 HTML 部分 :)
    【解决方案3】:

    试试这个,因为这适用于我的情况

    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);
    

    【讨论】:

      【解决方案4】:

      这段代码 sn-p 对我很有帮助:Upload files by sending multipart request programmatically

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

      【讨论】:

        猜你喜欢
        • 2012-11-24
        • 1970-01-01
        • 2017-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多