【问题标题】:How do you retrieve multipart POST request in Java SE 8?如何在 Java SE 8 中检索多部分 POST 请求?
【发布时间】:2017-03-28 15:16:26
【问题描述】:

Java SE 8 附带了 Servlet Spec 3.0,所以我认为处理多部分 POST 请求会很容易,但我错了。

我总是得到零部分,尽管我在 Chrome 网络调试器中看到有效负载包含两个图像!

我做错了什么?

这是我处理 POST 请求的 Java 代码:

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 "";
}

它总是记录 0 个部分。

我正在使用 Tomcat 7 和 Java SE 8。

我也认为在我自己的代码中使用这个 getFileName() 方法很奇怪,我希望 Java 8 能为我做到这一点......

非常感谢任何有关如何完成这项工作的提示!

【问题讨论】:

  • 您确实在混淆术语 - Java 8 与 Servlet 规范没有直接关系 - Java EE (JEE) 是。不管怎样,你似乎找到了the tutorial——你都关注了吗?
  • @stdunbar 是的,你是对的,Servlet 3.0 附带在 Java 8 上运行的 Tomcat 7(在我的具体情况下)。很抱歉。

标签: java servlets java-8 multipart servlet-3.0


【解决方案1】:

已编辑 我删除了我的预览答案,因为有一个更好的答案: https://stackoverflow.com/a/2424824/1484621 我想这会对你有所帮助。

为了澄清,Java SE 8 和 Servlet Spec 3.0 没有绑定在一起,如果不是早期版本,Sevlet 3.0 可以与 java 7 一起使用。容器发布的 Servlet 规范,从这里你发现的错误可能是容器依赖,切换到另一个容器(Tomcat/Jetty/GlassFish)再试一次。祝你好运!

【讨论】:

  • 现代 Java SE 8 方法看起来相当复杂,但我会研究一下。谢谢。一定有比这更好的解决方案!!!
  • 代码不是这样编译的。你从哪里得到静态字段UPLOADEDFILENAME_ATTRIBUTE
  • 另外,commons-fileupload 1.3中不存在代码sn-p末尾的引用类UploadFile
  • 我测试了您的代码并在FileItem fi = (FileItem) iter.next(); 处插入了一条日志语句,这也检索了零部分。所以这个公共文件上传也不能像这里描述的那样工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
相关资源
最近更新 更多