java|一个关于struts2上传文件超过限制大小如何提示的问题

问题描述:
在使用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 StringauthImgUpload() {

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);
}

}
}

    推荐阅读