利用Spring 组件 CommonsMultipartResolver控制上传文件大小
jeecms框架中以有上传文件 但为了避免服务器端的压力有必要控制文件大小在2M以内才允许上传
Jeecms 框架由SpringMVC +Hibernate +freemarker组成 Spring提供org.springframework.web.multipart.commons.CommonsMultipartResolver组件针对文件上传操作
根据需求,注入其属性
<!--限制文件上传2M内 --><bean id="multipartResolver" value="2097152"></property> </bean>
?
?当然文件大小控制住在2M内 点击上传后CommonsMultipartResolver直接过滤掉,页面没有相应提示信息,后台出现的错误并没有处理
严重: Servlet.service() for servlet JeeCmsAdmin threw exceptionorg.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 配置中 的限制注释掉
?
最终结果
?这样通过读取配置文件的信息返回 既解决了后台抛异常问题前段又有返回信息。
?