【问题标题】:What did I miss to send a http part post request我错过了什么发送 http 部分发布请求
【发布时间】:2015-12-15 17:03:02
【问题描述】:

我正在尝试使用 http 多部分请求发送图像(稍后我将添加另一个图像)

我这样做了:

HttpClient client = HttpClientBuilder.create().build();
    HttpPost httpPost = new HttpPost(
            "http://localhost:8080/ServletExample1/multipart1");
    httpPost.addHeader("Content-Type",
            "multipart/related; boundary=HereItGoes");
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    FileBody bin = new FileBody(new File("./test.txt"));
    builder.addPart("bin", bin);
    HttpEntity entity = builder.build();
    httpPost.setEntity(entity);
    HttpResponse response = client.execute(httpPost);
    String responseString = new BasicResponseHandler()
            .handleResponse(response);
    System.out.println(responseString);

在服务器上,我打印零件的数量,使用这个:

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
  if (ServletFileUpload.isMultipartContent(request)) {
    Iterator<Part> partsIterator = request.getParts().iterator();
    System.out.println("The number of parts is :" + request.getParts().size());

答案总是零,我做错了什么?

更新 1

作为@Jon Skeet,我在添加文件之前创建了请求。现在我重新排序了将execute 作为最后一行的代码,我仍然得到相同的东西,在服务器上的零件数量仍然为零

【问题讨论】:

  • 突然有人投反对票 :) 没有任何评论,任何事情,他/她只是投反对票。大声笑

标签: java servlets http-post multipart


【解决方案1】:

查看您何时调用execute - 那是在您正确构建请求之前!只需重新排序您的代码,以便您完全构建请求,然后您发布它以获得响应,然后您使用响应。 (如果在 File 构造函数中使用 URL,我个人也会感到惊讶,但也许那里发生了一些奇怪的事情......通常File 指的是本地文件系统文件......)

【讨论】:

  • 好吧,我愚蠢到没有看到我的错误。谢谢,但现在当我提出正确的请求时,我得到了这个例外:java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: Unexpected EOF read on the socket。请问有什么建议吗? (接受的答案)
  • @Marco:我认为你应该问一个更详细的新问题。
  • 请检查我的更新,您的解决方案似乎不是 100% 正确,因为我重新订购了代码,但我仍然在服务器中看到我的零件为零,文件在那里,我解析它,检查它的内容,它在正确的位置。我不知道为什么在服务器上我的零件数量仍然为零,请您帮忙。
猜你喜欢
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
相关资源
最近更新 更多