You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java文件上传编译报错:无法找到getSubmittedFileName()与Paths符号

解决Servlet文件上传编译错误的方案

错误原因分析

1. getSubmittedFileName() 方法找不到

Servlet 3.0规范的Part接口没有getSubmittedFileName()方法,该方法是Servlet 3.1(Java EE 7)才新增的。你当前使用的javax.servlet-api-3.0.1属于Servlet 3.0版本,导致编译报错。

2. Paths 找不到

代码中使用了java.nio.file.Paths类,但没有导入该类,所以编译器无法识别。


具体解决步骤

方案一:升级Servlet API依赖(推荐)

你的Tomcat 9.0支持Servlet 4.0规范,完全可以适配更高版本的API:

  1. 将javax.servlet-api的版本升级到4.0.1(兼容Java 8和Tomcat9)。
  2. 在代码顶部添加Paths的导入:
    import java.nio.file.Paths;
    
  3. 原代码中获取文件名的逻辑可以保留,此时编译就能通过。

方案二:不升级API,使用传统方式解析文件名

如果不想升级API,需要手动从Part的请求头中提取文件名:

  1. 添加Paths的导入(如果还要用Paths类):
    import java.nio.file.Paths;
    
  2. 替换获取文件名的代码:
    // 替换原有的fileName获取逻辑
    String fileName = getFileName(filePart);
    
  3. 新增解析文件名的工具方法:
    private String getFileName(Part part) {
        String contentDisposition = part.getHeader("content-disposition");
        for (String token : contentDisposition.split(";")) {
            if (token.trim().startsWith("filename")) {
                return token.substring(token.indexOf('=') + 1).trim().replace("\"", "");
            }
        }
        return null;
    }
    

额外注意点

  • 你代码中part.write(url)的url是字符串"myURL",这应该是一个实际的文件存储路径(比如"D:/uploads/"),否则会导致文件写入失败,记得替换为真实的本地路径或服务器存储路径。
  • 确保JSP表单的enctype属性设置为multipart/form-data,否则无法正确获取文件Part:
    <form method="post" action="addHabit" enctype="multipart/form-data">
        <!-- 文件输入框 -->
        <input type="file" name="monfichier">
        <input type="submit" value="提交">
    </form>
    

内容的提问来源于stack exchange,提问作者Pandalex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:25:32