如何在Jetty HttpClient中进行multipart / form-data发布

时间:2011-08-31 10:13:45

标签: jetty multipartform-data

我想知道是否有人可以帮助我。 对于Java项目,我想使用将Jetty HttpClient发送到Restful webservice的数据。 有几个问题:

  1. Jetty客户端是否支持multipart / form-data帖子? 从Jetty doc,通过使用HttpExchange.setRequestContent(Buffer)或HttpExchangge.setRequestContentSource(InputStream)方法发送您需要指定请求内容的任何数据。如果我使用setRequestContentSource进行文件上传,我怎么能为多部分帖子设置一个额外的表格参数如文件名?

  2. 有没有办法检查使用Jetty客户端上传的进度?我需要一个标准的东西,如进度条,显示字节发送,%等 Jetty提供了大量的回调,如onResponseContent,onResponseStatus,onRequestCommitted,但是没有人可以帮助监视已发送的字节数。是否可以使用Jetty httpclient获得上传进度?

  3. 提前谢谢

2 个答案:

答案 0 :(得分:1)

您必须使用MultiPartContentProvider

来自:http://download.eclipse.org/jetty/9.3.9.v20160517/apidocs/org/eclipse/jetty/client/util/MultiPartContentProvider.html

使用“multipart / form-data”内容类型进行表单上传的ContentProvider。

使用示例:

 MultiPartContentProvider multiPart = new MultiPartContentProvider();
 multiPart.addFieldPart("field", new StringContentProvider("foo"), null);
 multiPart.addFilePart("icon", "img.png", new PathContentProvider(Paths.get("/tmp/img.png")), null);
 multiPart.close();
 ContentResponse response = client.newRequest("localhost", connector.getLocalPort())
     .method(HttpMethod.POST)
     .content(multiPart)
     .send();

以上示例相当于提交此表单:

 <form method="POST" enctype="multipart/form-data"  accept-charset="UTF-8">
     <input type="text" name="field" value="foo" />
     <input type="file" name="icon" />
 </form>

答案 1 :(得分:-1)

使用Apache Http客户端4.x会对你有所帮助。 请参阅: http://hc.apache.org/httpcomponents-client-ga/examples.html