Java servlet可以';无法接收http post多部分请求的部分

Java servlet可以';无法接收http post多部分请求的部分,java,servlets,http-post,multipartform-data,multipart,Java,Servlets,Http Post,Multipartform Data,Multipart,首先,我问了这个问题,似乎我不理解从客户机向服务器发送多部分的逻辑。使用这篇文章,我无法看到每个部分中的必填字段 我构建了我的请求,并添加了您在这里看到的所有必填字段 HttpClient client = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost( "http://localhost:8080/ServletExample1/multipart1");

首先,我问了这个问题,似乎我不理解从客户机向服务器发送多部分的逻辑。使用这篇文章,我无法看到每个部分中的必填字段

我构建了我的请求,并添加了您在这里看到的所有必填字段

HttpClient client = HttpClientBuilder.create().build();
        HttpPost httpPost = new HttpPost(
                "http://localhost:8080/ServletExample1/multipart1");
        httpPost.addHeader("Content-Type",
                "multipart/related; boundary=HereItGoes");
        httpPost.addHeader("Accept", MediaType.TEXT_PLAIN);
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        FileBody bin = new FileBody(new File("./test.txt"));
        builder.addPart("source", new StringBody("MyComputer",
                ContentType.TEXT_PLAIN));
        builder.addPart("folder_id", new StringBody("-1",
                ContentType.TEXT_PLAIN));
        builder.addPart("file_type", new StringBody("txt",
                ContentType.TEXT_PLAIN));
        builder.addPart("file_name", new StringBody("test.txt",
                ContentType.TEXT_PLAIN));
        builder.addPart("description", new StringBody("The file to test",
                ContentType.TEXT_PLAIN));
        builder.addPart("data", bin);
        HttpEntity entity = builder.build();
        httpPost.setEntity(entity);
        HttpResponse response = client.execute(httpPost);
        String responseString = new BasicResponseHandler()
                .handleResponse(response);
        System.out.println(responseString);
我的问题是在服务器上,我一直收到部件数量为零的消息。对于服务器未接收部件的用户(注意,我并不是说服务器中存在异常)

我这样说是因为我在服务器(我的servlet)上这样做

Iterator<Part> partsIterator = request.getParts().iterator();
            System.out.println("The number of parts is :"
                    + request.getParts().size());
Iterator partsIterator=request.getParts().Iterator();
System.out.println(“零件数量为:”
+request.getParts().size());
打印的结果总是零,总是零


请问我缺少什么?

servlet的多部分配置需要
内容类型
多部分/表单数据

除其他地方外,这在

可以在
javax.servlet.servlet
类上指定的注释, 指示
Servlet
的实例期望符合 到
multipart/formdata
MIME类型

您正在指定不同的内容类型

httpPost.addHeader("Content-Type", "multipart/related; boundary=HereItGoes");
把这个扔掉。
MultipartEntityBuilder
已经用适当的头构建了一个请求。加上

builder.setBoundary("HereItGoes")
对于边界

示例
Servlet

@WebServlet(loadOnStartup = 1, urlPatterns = "/multipart1")
@MultipartConfig()
public class MyServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("The number of parts is :" + request.getParts().size());
        Iterator<Part> partsIterator = request.getParts().iterator();
        while (partsIterator.hasNext()) {
            System.out.println(partsIterator.next().getName());
        }
    }
}
@WebServlet(loadOnStartup=1,urlPatterns=“/multipart1”)
@MultipartConfig()
公共类MyServlet扩展了HttpServlet{
@凌驾
受保护的void doPost(HttpServletRequest请求,HttpServletResponse响应)引发ServletException,IOException{
System.out.println(“部件数量为:+request.getParts().size());
迭代器partsIterator=request.getParts().Iterator();
while(partsIterator.hasNext()){
System.out.println(partsIterator.next().getName());
}
}
}

它将收到您发送的所有6个部分以及您问题中的代码。

好的是您的答案非常有效,坏的是我似乎不必指定所有这些信息,如描述、文件名、文件类型、源和数据。正确的?因为我更改了它们的名称,请求仍然有效,我可以读取服务器上的新属性。你能告诉我在服务器中解析文件的链接或图说页面吗?另外,我如何发送多个部分:)您的代码只发送一个部分。@MarcoDinatsoli我不知道您的服务器在做什么,如何解析它,它期望什么,等等。我添加了一个示例
Servlet
,它接收所有部分。