springMVC的文件上传
能帮我解释一下这段上传文件的代码吗?
@PostMapping("/upload")
public String upload(HttpServletRequest request, @ModelAttribute User user, Model model) throws IOException {
if (!user.getImage().isEmpty()) {
String realPath = request.getServletContext().getRealPath("/images");//这是获取那个路径
System.out.println(realPath);
String filename = user.getImage().getOriginalFilename();
System.out.println(filename);
File file = new File(realPath,filename);//这是创建文件吗?第一个参数代表什么,第二个代表什么
if (!file.getParentFile().exists()){//getParentFile()是什么?和getParent()有啥区别
file.getParentFile().mkdirs();
}
user.getImage().transferTo(new File(file+File.separator+filename));
model.addAttribute("filename",user.getImage().getOriginalFilename());
System.out.println("上传路径:"+file+File.separator+filename);
return "uploadInfo";//不需要解释
}
return "error";//不需要解释
}
正在回答
同学你好,request.getServletContext().getRealPath("/images");
request.getServletContext() 获取到的是Servlet容器对象,而getRealPath("/images") 获取实际路径,也就是当前项目路径与images的对应路径,比如:
如上所示,它并不会判断images是否存在,所以对应在下面的代码中有对它的判断
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
同学你好,1、request.getServletContext().getRealPath("/images");
request.getServletContext() 获取的是Servlet容器对象,相当于tomcat容器。
getRealPath("images") 获取实际路径,所以这个代码返回的是实际的images的路径,也就是images的当前绝对项目路径。
2、new File(realPath,filename),其实就是创建文件流(File文件流),可以获取文件属性或者说是对文件进行操作。
public File(String parent,String child) --> File的构造方法 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 如果 parent 为 null,则创建一个新的 File 实例,这与调用以给定 child 路径名字符串作为参数的单参数 File 构造方法效果一样。 参数: parent - 父路径名字符串 child - 子路径名字符串
3、getParentFile()的返回值是File型的,而getParent() 的返回值是String型的;
返回File类型,为文件类型,可以进行文件的操作,比如调用创建子文件夹的方法:getParentFile().mkdirs();而返回String类型,为字符串类型,只能获取到当前的路径名,不能进行其他操作。
所以我们常用的返回文件所在文件夹路径方法的是getParentFile()。
综上所述:
public String upload(HttpServletRequest request, @ModelAttribute User user, Model model) throws IOException { if (!user.getImage().isEmpty()) { // 如果文件不为空,写入上传路径 String realPath = request.getServletContext().getRealPath("/images");//获取当前相对的images路劲 System.out.println(realPath); String filename = user.getImage().getOriginalFilename();//返回原始文件名 System.out.println(filename); File file = new File(realPath,filename);//通过File的构造方法,创建文件流 if (!file.getParentFile().exists()){//判断路径是否存在,如果不存在就创建一个 file.getParentFile().mkdirs(); } //通过transferTo方法直接写文件 ser.getImage().transferTo(new File(realPath+File.separator+filename)); model.addAttribute("filename",user.getImage().getOriginalFilename()); System.out.println("上传路径:"+file+File.separator+filename); return "uploadInfo";//不需要解释 } return "error";//不需要解释 }
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星