欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-15 14:23:09
...
问题描述:
在使用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);
		}
		
	}
}