`
han2000lei
  • 浏览: 272948 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

一个关于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 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);
		}
		
	}
}
分享到:
评论
1 楼 han2000lei 2015-07-20  
问题已解决,见下面代码
public void validateAuthImgUpload() {
	if("".equals(picName)|| picName==null||pic == null){//验证不能为空
if(!this.hasActionErrors()){]//加入判断,如果不为空,说明拦截器当中有错误了,就不再执行这部分,这部分就显示不出来了 
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 格式");
	}
	}

	}

相关推荐

Global site tag (gtag.js) - Google Analytics