Spring Boot文件上传Post控制器不生效,报File构造方法不匹配如何解决?
问题根因
你项目中自定义了名为File的实体类,和JDK原生用于文件操作的java.io.File重名,代码执行时优先匹配了你自定义的File类,该类仅提供File(Long,String,String,String)构造器,你传入单个字符串路径参数自然找不到匹配的构造方法,触发报错。
解决方案
方案1(临时修复)
显式指定调用JDK原生文件操作类,将代码中所有用于文件操作的File类替换为全限定名即可:
// 原代码 if (!new File(savePath).exists()) { try { new File(savePath).mkdir(); } catch(Exception e){ e.getStackTrace(); } } String filePath = savePath + "\\" + filename; files.transferTo(new File(filePath)); // 修改后代码 if (!new java.io.File(savePath).exists()) { try { new java.io.File(savePath).mkdir(); } catch(Exception e){ e.printStackTrace(); } } String filePath = savePath + java.io.File.separator + filename; files.transferTo(new java.io.File(filePath));
方案2(规范修复,更推荐)
修改自定义实体类的名称,避免和JDK常用类重名,比如改为FileEntity、BizFile等,从根源上杜绝后续同类型引用冲突问题。
优化建议
你当前代码中硬编码了Windows系统的路径分隔符\\,部署到Linux环境会失效,建议统一用java.io.File.separator代替,适配不同操作系统。
内容的提问来源于stack exchange,提问作者김진욱
相关产品推荐
相关产品推荐

