繁体   English   中英

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

[英]Creating a post request including a multipart file upload

我正在编写一个简单的代码段,该代码段发送一个简单的发布请求。

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

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

当前,您根本没有使用HTTP。 如果您打算进行POST,则首先需要确保发送正确的标头等,因此实际上是在进行HTTP连接。 您需要遵循RFC 1867( http://tools.ietf.org/html/rfc1867 )将文件内容正确编码到POST中。 这并不容易,这就是为什么有库为您执行此操作的原因。 所以我不得不问:为什么要避免使用HttpClient? 我一直为此目的使用它。 它是可靠,完整和高性能的。 您是否缺少(内存/磁盘)空间?

到目前为止,您需要使用RFC 1687RFC 2388中指定的格式的数据构造输出流。 这是很多工作,我不打算发布启动代码示例,很抱歉:)但是RFC包含清晰的信息和几个示例,数据看起来如何。 这是绝对可行的。

此代码段对我很有帮助: 通过以编程方式发送多部分请求来上传文件

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

试试这个,因为这在我的情况下有效

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM