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:
- 将
javax.servlet-api的版本升级到4.0.1(兼容Java 8和Tomcat9)。 - 在代码顶部添加
Paths的导入:import java.nio.file.Paths; - 原代码中获取文件名的逻辑可以保留,此时编译就能通过。
方案二:不升级API,使用传统方式解析文件名
如果不想升级API,需要手动从Part的请求头中提取文件名:
- 添加
Paths的导入(如果还要用Paths类):import java.nio.file.Paths; - 替换获取文件名的代码:
// 替换原有的fileName获取逻辑 String fileName = getFileName(filePart); - 新增解析文件名的工具方法:
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
相关产品推荐
相关产品推荐

