简体   繁体   English

如何在Java SE 8中检索多部分POST请求?

[英]How do you retrieve multipart POST request in Java SE 8?

Java SE 8 comes with the Servlet Spec 3.0 so I thought it would be very easy to process a multipart POST request, but I was wrong. Java SE 8随Servlet Spec 3.0一起提供,因此我认为处理多部分POST请求将非常容易,但是我错了。

I always get zero parts, although I see in the Chrome network debugger that the payload contains two images! 我总是得到零零件,尽管我在Chrome网络调试器中看到有效负载包含两个图像!

What am I doing wrong? 我究竟做错了什么?

Here is my Java Code processing the POST request: 这是我的Java代码处理POST请求:

if (request.isMultipartRequest()) {
  Collection<Part> parts = request.getParts();
  log.info("number of parts: "+parts.size());
  for (Part part : parts) {
    String fileName = getFileName(part);
    log.info("fileName = "+fileName);
  }
}
...

private String getFileName(Part part) {
    String contentDisp = part.getHeader("content-disposition");
    System.out.println("content-disposition header= "+contentDisp);
    String[] tokens = contentDisp.split(";");
    for (String token : tokens) {
        if (token.trim().startsWith("filename")) {
            return token.substring(token.indexOf("=") + 2, token.length()-1);
        }
    }
    return "";
}

It always logs 0 parts. 它总是记录0个部分。

I'm using Tomcat 7 and Java SE 8. 我正在使用Tomcat 7和Java SE 8。

I also think it is very weird to have this getFileName() method in my own code, I expected Java 8 to do that for me... 我也认为在自己的代码中有此getFileName()方法非常奇怪,我希望Java 8能够为我做这件事。

Any hints on how to make this work is very appreciated! 非常感谢您如何进行这项工作的任何提示!

EDITED I removed my previews answer because there is a much better one: https://stackoverflow.com/a/2424824/1484621 I think this will help you. 编辑我删除了我的预览答案,因为有一个更好的答案: https : //stackoverflow.com/a/2424824/1484621我认为这将对您有所帮助。

For clarify, the Java SE 8 and Servlet Spec 3.0 are not bonded together, Sevlet 3.0 can work with java 7 if not earlier versions. 为了澄清起见,Java SE 8和Servlet Spec 3.0没有绑定在一起,如果不是早期版本,Sevlet 3.0可以与Java 7一起使用。 The Servlet specification released by containers, and from here the error you found maybe container depended, switch to another container(Tomcat/Jetty/GlassFish) and try again. 容器发布的Servlet规范,从这里发现的错误可能取决于容器,请切换到另一个容器(Tomcat / Jetty / GlassFish),然后重试。 Good luck! 祝好运!

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

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