一个关于struts2上传文件超过限制大小如何提示的问题
程序员文章站
2022-07-15 14:16:35
...
问题描述:
在使用struts2中上传文件时,在框架中本身给我们设置了一个限制大小。如果上传的文件超过这个大小,在拦截器中就返回了,并且这个错误提示是系统内置的,放在Action级别的Error当中。这个错误非常不友好,需要我们自己替换掉。下面的代码做到了,但出现了一个问题,看看哪位能够解决掉?
1、首先先说如何解决掉系统内置的ActionError,就是重写addActionError方法(见下面代码中)。
2、下面,问题出现了:我有一个验证方法,防止所有内容为空的验证,方法名见下面代码中validateAuthImgUpload方法(这是一个多动作控制器的验证),在这个方法当中判断页面的内容为空时,添加一个addActionError信息。这时,按上面的前提,文件上传时超出了系统的大小限制,拦截器拦截之后,将我修改的后的友好的提示放了进去,同时,它还将所有的提交的页面的内容置空了。然后又添加了validateAuthImgUpload方法的ActionError进去(这个地方我不明白,为什么validateAuthImgUpload方法能够执行,拦截中有错误了,按说是不执行了才对,但它的确是将这个方法当中的错误信息放进了ActionError当中),这时加上第一个错误,就有两个错误了,在页面一下子就显示出两个错误提示给用户,这种提示是不对的,哪位大侠能帮忙解决?
在使用struts2中上传文件时,在框架中本身给我们设置了一个限制大小。如果上传的文件超过这个大小,在拦截器中就返回了,并且这个错误提示是系统内置的,放在Action级别的Error当中。这个错误非常不友好,需要我们自己替换掉。下面的代码做到了,但出现了一个问题,看看哪位能够解决掉?
1、首先先说如何解决掉系统内置的ActionError,就是重写addActionError方法(见下面代码中)。
2、下面,问题出现了:我有一个验证方法,防止所有内容为空的验证,方法名见下面代码中validateAuthImgUpload方法(这是一个多动作控制器的验证),在这个方法当中判断页面的内容为空时,添加一个addActionError信息。这时,按上面的前提,文件上传时超出了系统的大小限制,拦截器拦截之后,将我修改的后的友好的提示放了进去,同时,它还将所有的提交的页面的内容置空了。然后又添加了validateAuthImgUpload方法的ActionError进去(这个地方我不明白,为什么validateAuthImgUpload方法能够执行,拦截中有错误了,按说是不执行了才对,但它的确是将这个方法当中的错误信息放进了ActionError当中),这时加上第一个错误,就有两个错误了,在页面一下子就显示出两个错误提示给用户,这种提示是不对的,哪位大侠能帮忙解决?
package com.test.action; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.FileCopyUtils; import com.test.service.impl.PicUpLoadImpl; import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") public class PicUpAction extends ActionSupport { Logger logger = LoggerFactory.getLogger(PicUpAction.class); private PicUpLoadImpl picUpLoad; private String picName; private File pic; private String picFileName; private String picContentType; public void setPicUpLoad(PicUpLoadImpl picUpLoad) { this.picUpLoad = picUpLoad; } public String getPicName() { return picName; } public void setPicName(String picName) { this.picName = picName; } public File getPic() { return pic; } public void setPic(File pic) { this.pic = pic; } public String getPicFileName() { return picFileName; } public void setPicFileName(String picFileName) { this.picFileName = picFileName; } public String getpicContentType() { return picContentType; } public void setpicContentType(String picContentType) { this.picContentType = picContentType; } /* * 上传验证码图片 * @param */ public String authImgUpload() { InputStream picStream; byte[] byt = new byte[0]; try { picStream = new FileInputStream(pic); byt = FileCopyUtils.copyToByteArray(picStream); picStream.close(); if(byt.length>1048576){ this.clearActionErrors(); this.addActionError("上传图片超过1M大小限制"); return "input"; } } catch (FileNotFoundException e1) { this.clearActionErrors(); this.addActionError("上传文件没有找到,正确选择文件"); logger.error("上传的文件没有找到"+e1.getMessage()); } catch (IOException e) { this.clearActionErrors(); this.addActionError("IO Exception"); logger.error("上传文件读取错误"+e.getMessage()); } int flag = this.picUpLoad.upload("", picName, byt); if(flag==1){ return "authimgupok"; }else{ return ActionSupport.INPUT; } } public void validateAuthImgUpload() {//validate()验证方法 if("".equals(picName)|| picName==null||pic == null){//验证不能为空 // this.clearActionErrors();//这个地方清也不对,不清也不对 this.addActionError("请输入图片名称并选择上传文件"); }else{ String fileName = this.getPicFileName();//取到文件名 int index = fileName.indexOf(".");//找到点号,准备取后缀名 String fix = fileName.substring(index+1); if(!("jpg".equals(fix)||"png".equals(fix)||"bmp".equals(fix)||"gif".equals(fix))){ this.clearActionErrors(); this.addActionError("图片只能是 gif/jpg/png/bmp 格式"); } } } @Override public void addActionError(String anErrorMessage) {//这个是重写的addActionError的方法,去掉系统的提示,使用自已的 if(anErrorMessage.startsWith("Request exceeded allowed size limit")){ super.addActionError("上传图片超过1M大小限制"); }else{ super.addActionError(anErrorMessage); } } }