jeecms框架中以有上传文件 但为了避免服务器端的压力有必要控制文件大小在2M以内才允许上传
Jeecms 框架由SpringMVC +Hibernate +freemarker组成 Spring提供org.springframework.web.multipart.commons.CommonsMultipartResolver组件针对文件上传操作
根据需求,注入其属性
<!--限制文件上传2M内 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="2097152"></property> </bean>
当然文件大小控制住在2M内 点击上传后CommonsMultipartResolver直接过滤掉,页面没有相应提示信息,后台出现的错误并没有处理
严重: Servlet.service() for servlet JeeCmsAdmin threw exception
org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (2152078) exceeds the configured maximum (2097152)
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:914)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:349)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:155)
at org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:138)
那么如何更友好 的返回错误信息
在后台找到上传的控制器在获取字节时候控制住大小
private WebErrors validate(String filename, MultipartFile file,
HttpServletRequest request) {
WebErrors errors = WebErrors.create(request);
if (file == null) {
errors.addErrorCode("imageupload.error.noFileToUpload");
return errors;
}
//限制上传文件2M内
if(file.getSize()>2097152)
{
errors.addError("imageupload.error.maxSize");
return errors;
}
if (StringUtils.isBlank(filename)) {
filename = file.getOriginalFilename();
}
String ext = FilenameUtils.getExtension(filename);
if (!ImageUtils.isValidImageExt(ext)) {
errors.addErrorCode("imageupload.error.notSupportExt", ext);
return errors;
}
try {
if (!ImageUtils.isImage(file.getInputStream())) {
errors.addErrorCode("imageupload.error.notImage", ext);
return errors;
}
} catch (IOException e) {
log.error("image upload error", e);
errors.addErrorCode("imageupload.error.ioError", ext);
return errors;
}
return errors;
}
addError方法去读配置文件信息
最后把spring 配置中 的限制注释掉
最终结果
这样通过读取配置文件的信息返回 既解决了后台抛异常问题前段又有返回信息。