`
han2000lei
  • 浏览: 276134 次
  • 性别: 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 格式");
	}
	}

	}

相关推荐

    struts文件上传大小限制问题

    - Struts 2提供了一个名为`Struts2-FileUpload-plugin`的插件,它可以方便地处理文件上传,并且支持自定义文件大小限制。 5. **安全考虑**: - 不限制文件大小可能会导致DoS攻击,因此,即使服务器和容器未设定...

    Struts2文件上传的大小限制问题

    然而,文件上传功能也涉及到一个重要的问题,那就是大小限制。在实际应用中,为了防止恶意用户上传大文件导致服务器资源耗尽,或者保护服务器免受DoS攻击,通常会设定文件上传的大小限制。 这篇博客“Struts2文件...

    struts2 上传文件超过最大值解决办法

    在Struts2框架中,处理文件上传是一项常见且重要的功能,尤其当涉及到大文件上传时,往往会遇到上传文件大小超过预设限制的问题。这不仅影响用户体验,还可能导致应用程序出现异常或错误。本文将深入探讨如何解决...

    struts+spring文件上传大小限制.rar

    如果上传文件大小超过这个限制,Struts会抛出`MaxUploadSizeExceededException`异常。 2. Spring框架中的文件上传: Spring提供了`CommonsMultipartFile`类来处理文件上传,它是基于Apache Commons FileUpload库的...

    struts2实现文件上传下载

    Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java Web开发中。文件上传和下载是Web应用程序中的常见功能,对于用户交互和数据交换至关重要。本篇文章将详细探讨如何在Struts2框架下实现文件的上传与...

    struts2文件上传,文件大小设置

    如果上传的文件超过这个限制,Struts2会抛出一个`FileSizeLimitExceededException`异常。 2. **拦截器配置**: 拦截器是Struts2处理请求的重要组成部分,它们在Action执行之前和之后运行。`FileUploadInterceptor`...

    struts2上传文件源代码

    Struts2是一个强大的Java web应用程序开发框架,它提供了一种模型-视图-控制器(MVC)架构,帮助开发者组织和构建高效的、可扩展的Web应用。在这个“struts2上传文件源代码”中,我们将深入探讨Struts2如何实现文件...

    struts2文件上传下载源代码

    Struts2是一个非常流行的Java Web框架,用于构建企业级应用。它的强大之处在于提供了一种模型-视图-控制器(MVC)架构,使得开发者能够更有效地管理应用程序的业务逻辑、用户界面和数据流。在Struts2中,文件上传和...

    JavaEE Struts文件上传

    1. **配置Struts2 Action**:在Struts2中,我们需要创建一个Action类来处理文件上传请求。这个类通常需要实现`ServletRequestAware`接口,以便可以直接访问HttpServletRequest对象,从中获取上传文件。 2. **添加...

    struts文件上传大小限制

    Struts是Apache软件基金会的一个开源项目,主要是一个用于构建企业级Java Web应用程序的MVC(Model-View-Controller)框架。在Struts中处理文件上传功能时,有时我们需要对上传的文件大小进行限制,以防止恶意用户...

    struts2文件上传

    默认情况下,这个拦截器可能会限制上传文件的类型为`.txt`,并且大小不超过10MB。这种限制是为了防止恶意用户上传大文件或者非文本文件,从而可能对服务器造成压力或引入安全风险。 配置文件`struts.xml`中关于文件...

    Struts2 上传文件(带过滤文件类型和大小)

    Struts2 是一个非常流行的Java Web开发框架,它提供了一种强大的MVC(Model-View-Controller)架构来构建企业级应用。在Struts2中,文件上传功能是常见的需求,比如用户可能需要上传个人照片、文档等。然而,为了...

    swfuplaod+struts2实现多文件上传

    3. **文件大小限制**:设定上传文件的大小上限,防止DoS攻击。 4. **权限控制**:确保只有授权用户可以访问上传的文件。 **五、优化与扩展** 为了进一步优化用户体验,可以考虑以下方面: 1. **错误处理**:提供...

    struts2+jquery+ajax文件异步上传

    在Struts2的配置文件中,我们可以定义这些规则,例如限制上传文件的大小,只接受特定类型的文件(如图片、文档等)。此外,我们还需要关注安全问题,防止恶意文件上传。 文件上传的实现通常包括以下几个步骤: 1. ...

    struts2文件上传例子.rar

    同时,我们还需要配置`struts.multipart.saveDir`属性,指定临时文件保存的位置,以及`struts.multipart.maxSize`,限制上传文件的最大大小。 在视图层,通常会有一个HTML表单,使用`enctype="multipart/form-data...

    解决Struts2上传文件后文件大小变大

    在使用Struts2进行文件上传时,可能会遇到一个常见的问题,即上传后的文件大小与原始文件大小不一致,甚至出现文件大小变大的情况。这个问题通常是由于处理文件输入流和输出流的方式不当导致的。让我们深入探讨一下...

    Struts2文件上传源码

    Struts2是一个流行的Java Web框架,它为开发者提供了一种优雅的方式来构建可维护、可扩展且结构清晰的Web应用程序。在Struts2中,文件上传是常见的功能之一,尤其是在处理用户提交表单时,比如上传图片、文档等。...

    struts2框架下的文件上传

    在Struts2中,文件上传是一个常见的需求,可以帮助用户从客户端上传文件到服务器。本文将详细讲解Struts2框架下三种不同的文件上传方式:copy模式、字节流上传和字符流上传。 1. Copy模式文件上传: Copy模式是...

    struts2文件上传实例

    Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java Web开发中。文件上传功能是Web应用中常见的需求,例如用户上传图片、文档等。在Struts2框架下实现文件上传,主要涉及到以下几个核心概念和技术点:...

    struts2文件上传jar

    在Action类中,你需要定义一个或多个属性来接收上传的文件,并设置相应的注解来告知Struts2如何处理它们。 在Action类中,你可以使用`File` 或 `FileItem` 对象来接收文件。`FileItem` 是Apache Commons FileUpload...

Global site tag (gtag.js) - Google Analytics