未为类型 Part 定义方法 getSubmittedFileName()

The method getSubmittedFileName() is undefined for the type Part

我正在尝试在 servlet 3.0> 中上传多个文件。我在 getSubmittedFileName() 方法中遇到错误。为什么会出现此错误?

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    String description = request.getParameter("description"); // Retrieves
                                                                // <input
                                                                // type="text"
                                                                // name="description">
    Part filePart = request.getPart("file"); // Retrieves <input type="file"
                                                // name="file">
    String fileName = Paths.get(filePart.getSubmittedFileName())
            .getFileName().toString(); // MSIE fix.
    InputStream fileContent = filePart.getInputStream();
    // ... (do your job here)
}

我以前遇到过这个问题。 有人帮助我找到了这个问题的根源,所以这是我得到的解决方案:

在 Java EE 7 的 DOC 中,您可以看到自 Servlet 3.1 以来,已将 'Interface Part' 添加到其中的 getSubmittedFileName 方法,并且从 tomcat 网站您可以看到 Tomcat 7 实现了 Servlet 3.0,所以我需要从 Tomcat 7 升级到 Tomcat 8.0.x.

参考文献:

如果您使用的是 Servlet 3.0,则必须手动定义 getSubmittedFileName()

this answer中向下滚动到“当你还没有使用 Servlet 3.1 时,手动获取提交的文件名”方法定义并根据您的需求。

如果像我这样的人来到这里 getSubmittedFileName()

for (Part filePart : request.getParts())循环

然后就知道不是每个 Part 都有一个 FileName 属性 :)

我遇到过这个问题, 只需在 Maven pom.xml 文件中应用此依赖项...

     <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
     <dependency>
         <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
          <scope>provided</scope>
       </dependency>