在做博客系统的修改个人信息的功能的时候, 需要做修改用户头像的功能. 这时候需要用到SpringMVC的文件上传功能.
SpringMVC使文件上传成为WEB应用程序开发人员的一项非常简单的工作. SpringMVC的jar库提供CommonsMultipartResolver类, 特别关注使用多部分/表单数据(multipart/form-data)编码类型提交的表单. 我们还可以在这个解析器中指定最大文件大小.
第一步: 在spring-mvc.xml文件中注册文件上传解析器
为了能够让Spring能够处理多部件的表单, 我们首先需要在SpringMVC的配置文件中注册文件上传解析器.
<!--配置文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="4097152"/>
</bean>
其中maxUploadSize的值为上传文件的最大大小(单位为字节). 当上传的文件超出指定的值时, 就会抛出FileUploadBase$SizeLimitExceededException异常. 我们需要做的就是处理这种类型的异常.
第二步: 创建文件上传的表单
创建文件上传表单需要指定form的entry属性为multipart/form-data
<form class="form-horizontal" id="infoForm" method="post" enctype="multipart/form-data">
...
</form>
第三步: 创建文件上传的Controller
@PostMapping("updateInfo")
@ResponseBody
public String updateInfo(HttpSession session, User user, MultipartFile imgFile, HttpServletRequest request, HttpServletResponse response) {
response.setContentType("application/json; charset=utf-8");
User loginUser = (User) session.getAttribute("_USER_MODEL");
String avatar = "";
if (imgFile != null) {
avatar = FileUploadUtil.uploadAvatar(request, imgFile);
}
...
}
完成以上几步就能够实现基本的文件上传功能. 但是当文件的大小超出限制的时候, 就需要做一些额外的操作.
第一步: 实现HandlerExceptionResolver接口
@Controller
@RequestMapping("/home")
public class HomeController implements HandlerExceptionResolver {
...
}
第二步: 实现HandlerExceptionResolver接口中的方法
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
ModelAndView modelAndView = new ModelAndView();
HashMap<Object, Object> map = new HashMap<>();
response.setContentType("application/json; charset=utf-8");
if (ex instanceof MaxUploadSizeExceededException) {
map.put("success", false);
map.put("message", "文件大小超出限制");
logger.debug(map);
try {
response.getWriter().write(ObjectToJsonUtil.mapToJSON(map));
} catch (IOException e) {
e.printStackTrace();
}
} else {
ex.printStackTrace();
}
return modelAndView;
}
以上, 当上传的头像文件超出限制的时候, 弹窗提醒文件大小超出限制.
参考:
使用Spring MVC和注释配置来实现文件上传 - jQuery插件 - 其它 - 深度开源
最后分享一张图片, 嘿嘿嘿