MultipartFile.transferTo(dest) 报找不到文件

发布时间 2023-11-28 10:16:06作者: 德邦总管

本文转载自:https://blog.csdn.net/woyaoxuexi10000nian/article/details/89318846

 

MultipartFile.transferTo(dest)报找不到文件

今天使用transferTo这个方法进行上传文件的使用发现了一些路径的一些问题,查找了一下记录问题所在

前端上传网页,使用的是单文件上传的方式

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 7 </head>
 8 <body>
 9     <form enctype="multipart/form-data" method="post" action="/upload">
10         文件:<input type="file" name="head_img">
11         姓名:<input type="text" name="name">
12         <input type="submit" value="上传">
13 
14     </form>
15 
16 </body>
17 </html>

后台网页

@Controller
@RequestMapping("/file")
public class UploadFileController {
@Value("${file.upload.path}")
private String path = “upload/”;

 1 @RequestMapping(value = "fileUpload", method = RequestMethod.POST)
 2 @ResponseBody
 3 public String fileUpload(@RequestParam("file") MultipartFile file) {
 4     if (file.isEmpty()) {
 5         return "false";
 6     }
 7     String fileName = file.getOriginalFilename();
 8     File dest = new File(path + "/" + fileName);
 9     if (!dest.getParentFile().exists()) { 
10         dest.getParentFile().mkdirs();
11     }
12     try {
13         file.transferTo(dest); // 保存文件
14         return "true";
15     } catch (Exception e) {
16         e.printStackTrace();
17         return "false";
18     }
19 }

这个确实存在一些问题

路径是不对的

dest 是相对路径,指向 upload/doc20170816162034_001.jpg
file.transferTo 方法调用时,判断如果是相对路径,则使用temp目录,为父目录
因此,实际保存位置为 C:\Users\xxxx\AppData\Local\Temp\tomcat.372873030384525225.8080\work\Tomcat\localhost\ROOT\upload\doc20170816162034_001.jpg

所以改为:

@Controller
@RequestMapping("/file")
public class UploadFileController {
@Value("${file.upload.path}")
private String path = “upload/”;

 1 @RequestMapping(value = "fileUpload", method = RequestMethod.POST)
 2 @ResponseBody
 3 public String fileUpload(@RequestParam("file") MultipartFile file) {
 4     if (file.isEmpty()) {
 5         return "false";
 6     }
 7     String fileName = file.getOriginalFilename();
 8     File dest = new File(new File(path).getAbsolutePath()+ "/" + fileName);
 9     if (!dest.getParentFile().exists()) { 
10         dest.getParentFile().mkdirs();
11     }
12     try {
13         file.transferTo(dest); // 保存文件
14         return "true";
15     } catch (Exception e) {
16         e.printStackTrace();
17         return "false";
18     }
19 }