今天团队里的一个小伙子在写代码的时候,遇到一个问题。他在做上传文件的表单时,限制最大上传文件的大小。但当用户上传的文件超过大小后,虽然后台有报异常,前台却没有错误提示。他拿着这个问题问到了我,我把解决问题的过程记录下来,做个分享。
总体思路
服务端拦截异常,并直接返回值给前台。前台根据返回的值给用户做下一步处理。
主要代码
Spring Boot 配置文件
8888 =
# 下面两个参数是设置上传文件大小
2MB =
2MB =
# 下面两个参数是禁用spring的默认异常映射,比如将异常会自动映射到 /error下。
true =
false =捕获文件超过设置大小的异常,并直接返回错误信息
public class RestExceptionHandler {
public String unknownException(Exception ex, WebRequest req) {
System.out.println(ex);
return "too large.";
}
}前端ajax处理
$("#upload").click(function () {
$.ajax({
url: '/upload',
type: 'POST',
cache: false,
data: new FormData($('#uploadForm')[0]),
processData: false,
contentType: false}).done(function(res) {
console.log("done");
}).fail(function(res) {
console.log("fail");
console.log(res['responseText']);
});
})异常会在fail回调函数里被console.log打印出来。