`

利用Spring 组件 CommonsMultipartResolver控制上传文件大小

阅读更多

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 配置中 的限制注释掉

 

最终结果



 这样通过读取配置文件的信息返回 既解决了后台抛异常问题前段又有返回信息。

 

  • 大小: 128.6 KB
  • 大小: 80 KB
  • 大小: 136.6 KB
分享到:
评论
1 楼 yo8237233 2014-11-08  
楼主,请问这个上传异常在请求进去控制器之前就已经被spring拦截报错了,你是怎么进去validate这个错误处理方法里面的呢

相关推荐

Global site tag (gtag.js) - Google Analytics