-
问题描述:
打算给自己的项目添加一个上传文件保存功能,于是我使用MultipartFile.transferTo()来完成这个功能,由于我的项目要部署到服务器,所以我使用了相对路径把上传的文件保存到当前项目的工作目录下,但是报错了!(绝对路径可以正常使用,找了一下午没弄明白,第二天早上才反应过来会不会是这个方法就不支持直接使用相对路径,果然是猜想的这样!)
-
当MultipartFile的transferTo()的参数是相对路径时,会自动拼接成一个绝对路径,但这个绝对路径并不是真实存在的,所以转存时会报错,而如果传递的时绝对路径,就不会有问题。
- 解决方法如下:
//修改1.写你要保存上传文件的相对路径
File dir = new File("./src/main/resources/img/");
if (!dir.exists()) {
dir.mkdirs(); // 创建目录
}
String realPath = dir.getCanonicalPath(); // 获取真实路径
//修改2
File dest = new File(realPath+"/"+fileName);
- 最后完整的代码:
@RequestMapping("/upload")
public String upload(HttpServletRequest request, HttpServletResponse req) throws IOException {
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
//前端参数名
MultipartFile file = multiRequest.getFile("image");
if (file.isEmpty()) {
return "上传失败,请选择文件";
}
//获取到上传文件名
String fileName = file.getOriginalFilename();
//修改1.写你要保存上传文件的相对路径
File dir = new File("./src/main/resources/img/");
if (!dir.exists()) {
dir.mkdirs(); // 创建目录
}
String realPath = dir.getCanonicalPath(); // 获取真实路径
// String filePath = "./src/main/resource/img/" + fileName; // 这里填写你想要保存的路径,例如:"images/" + fileName;
//修改2
File dest = new File(realPath+"/"+fileName);
try {
file.transferTo(dest);
// file.transferTo(dest);
req.sendRedirect("ok.html");
return fileName;
} catch (IOException e) {
e.printStackTrace();
}
return "上传失败!";
}