文件上传提示C:\Users\xxxx\AppData\Local\...系统找不到指定的路径问题修复

您所在的位置:网站首页 apache系统找不到指定的路径 文件上传提示C:\Users\xxxx\AppData\Local\...系统找不到指定的路径问题修复

文件上传提示C:\Users\xxxx\AppData\Local\...系统找不到指定的路径问题修复

2023-06-15 19:17| 来源: 网络整理| 查看: 265

1、报错案例代码 后端:

public UploadRes upLoadFile(MultipartFile file, String savePath) {UploadRes uploadRes = new UploadRes();try {File saveDir = new File(savePath).getParentFile();// 判断路径是否存在,如果不存在就创建一个if (saveDir != null && !saveDir.exists()) {saveDir.mkdirs();}file.transferTo(new File(savePath));uploadRes.setFlag(true);uploadRes.setResFilePath(savePath);uploadRes.setMsg("文件上传成功");uploadRes.setOriFileName(file.getOriginalFilename());} catch (Exception e) {e.printStackTrace();uploadRes.setFlag(false);uploadRes.setMsg("文件存储失败");}return uploadRes;}

本例运行时参数 savePath为相对路径/home/upload/aaa.jpg 在执行file.transferTo(new File(savePath))时,报错提示 FileNotFoundException: C:\Users\XXX\AppData\Local\Temp\tomcat.9095.675054628671612619\work…(系统找不到指定的路径)。

2、修改后代码示例

public UploadRes upLoadFile(MultipartFile file, String savePath) {UploadRes uploadRes = new UploadRes();try { // File saveDir = new File(savePath).getParentFile(); // // 判断路径是否存在,如果不存在就创建一个 // if (saveDir != null && !saveDir.exists()) { // saveDir.mkdirs(); // } // // file.transferTo(new File(savePath));// 相对路径转绝对路径进行保存,防止相对路径找不到临时文件File dest = new File(new File(savePath).getAbsolutePath());if (!dest.getParentFile().exists()) {dest.getParentFile().mkdirs();}file.transferTo(dest);uploadRes.setFlag(true);uploadRes.setResFilePath(savePath);uploadRes.setMsg("文件上传成功");uploadRes.setOriFileName(file.getOriginalFilename());} catch (Exception e) {e.printStackTrace();uploadRes.setFlag(false);uploadRes.setMsg("文件存储失败");}return uploadRes;}

此时运行提交,代码没有报错,文件上传成功。 运行时new File(savePath).getAbsolutePath()后,可以debugger看到文件路径为D:\home\upload\aaa.jpg

3、问题分析: 可以通过参数看到,错误案例时,上传文件的路径为相对路径。成功的案例因为多new File转为绝对路径。 file.transferTo(dest);会根据dest文件的实例化路径去做处理。判断如果是相对路径,则使用temp目录,就是上诉报错的C:\Users\XXX\AppD…。如果是绝对路径就可以找到直接运输保存到新文件。

当然本例仅为file.transferTo(dest)方法的修复,也可以通过其他方式, 如:引入 commons-io commons-io 2.5 调用如下的方法 FileUtils.copyInputStreamToFile(MultipartFile.getInputStream(),destFile); 经过调试应该也是可以的。

学海无涯苦作舟!!!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3