有关MultipartResolver的一些疑惑
来源:4-6 店铺注册功能之Controller层的实现(上)
种苹果树的兔子
2020-11-25
//1.3接收图片文件,使用Spring自带的CommonsMultipartFile
CommonsMultipartFile shopImg = null;
//文件解析器CommonsMultipartResolver来解析request里面的文件信息
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//检查form中是否有设置enctype="multipart/form-data"
if (commonsMultipartResolver.isMultipart(request)) {
//将request由HttpServletRequest类强制转换为MultipartHttpServletRequest类,后者继承了前者
MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
//将文件流提取出来,shopImg同样是在前端界面约定好的变量名称
shopImg = (CommonsMultipartFile) multipartHttpServletRequest.getFile("shopImg");
} else {
modelMap.put("success", false);
modelMap.put("errMsg", "上传图片不能为空");
return modelMap;
}
问题:
老师我想请教下,这段代码中为什么要获取一个CommonsMultipartResolver来调用isMultipart()这个方法?
我的想法:
- 我们已经在xml中配置了文件上传解析器,DispatcherServlet 应该会自动调用 MultipartResolver 的 isMultipart(request) 方法检查当前 Web 请求是否为 multipart类型。如果是,DispatcherServlet 将调用 MultipartResolver 的resolveMultipart(request) 方法,对原始 request 进行装饰,并返回一个 MultipartHttpServletRequest,我们只需要接收这个MultipartHttpServletRequest并提取文件就可以吧,为什么还要重复调用isMultipart()这个方法呢?
- 我感觉这个判断没有意义,这个方法应该只会检查enctype是否是="multipart/form-data"吧。我试过,如果不提交文件,会提示错误信息“请输入店铺信息”并不会提示“上传图片不能为空”这个信息,而且如果提交一个非图片文件,甚至不会报任何错误信息,会直接提示提交成功。
还望老师不吝赐教
写回答
1回答
-
同学好,咱们这样写主要是用来检查第三方提交的,也就是说不是通过我们网页进行请求的,https://coding.imooc.com/learn/questiondetail/29453.html
112020-11-26
相似问题