首页 文章

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

提问于
浏览
0

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

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

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

先感谢您

2 回答

  • 1

    您必须使用MultiPartContentProvider

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

    ContentProvider,用于使用“multipart / form-data”内容类型进行表单上载 .

    用法示例:

    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

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

相关问题