先粘贴一段文件上传控制器代码
@RequestMapping("fileupload")
public String uploadFile(MultipartFile file, HttpServletRequest req) throws IOException {
// 判断文件是否为空,空则返回失败页面
if (file.isEmpty()) {
return "failed";
}
// 获取文件存储路径(绝对路径)
String path = req.getServletContext().getRealPath("/upload");
//判断目录是否存在,若不存在,则创建
File dir = new File(path);
if (!dir.exists()){
dir.mkdirs();
}
// 获取原文件名
String fileName = file.getOriginalFilename();
String uuid = UUID.randomUUID().toString().replaceAll("-","").toUpperCase();
fileName = uuid+"_"+fileName;
// 创建文件实例
File filePath = new File(path, fileName);
// 写入文件
file.transferTo(filePath);
return "success";
}
获取上传的文件夹采用了req.getServletContext().getRealPath("/upload");
通过各种实验,该语句只能获取到服务器中项目根目录,加上后边的 "/upload" ,即便是我配置了External Source,指向该路径,但是该语句仍然只是获取服务器中项目根目录下的upload文件路径,并不是我后来配置的External Source文件的真实路径。
1. 尝试用虚拟地址+upload访问req.getServletContext().getRealPath("/upload");获取到的目录下的文件,访问失败。
2. 尝试用主机地址localhost:8080/upload访问,失败。
3. 在编译后的目录中选择upload配置External Source,访问成功。
3. 上传文件到req.getServletContext().getRealPath("/upload")目录,成功。
总结:
1. 编译后的项目根目录下的文件夹名/文件,不能成功访问,需要将该目录配置为External Source;
2. req.getServletContext().getRealPath("/upload"); 该语句只是获取编译后的项目根目录下的upload文件夹路径;
3.External Source配置文件访问目录和上传目录不相关.