`
rockydang
  • 浏览: 30398 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

struts2大文件上传错误处理

阅读更多

问题描述:前段时间在struts2下做文件上传,当上传大文件时出现了几个问题。

 

问题1:当有大文件上传时,即超过struts2配置的最大值时会报出一段英文的出错信息, "the request was rejected because its size ..."

 

问题2: 由于错误的产生,原来页面上输入的内容也全部不见了,也就是说参数(params)注入失败。

 

解决方法:解决第一个问题的方法挺多,现只列举最简便的方法。

               解决方案1:  解决方法在上传文件的的action加入对addActionError方法的重写,代码如下:

               

/**
	 * 替换文件上传中出现的错误信息 引用 import java.util.regex.Matcher; import
	 * java.util.regex.Pattern;
	 * 
	 */
	@Override
	public void addActionError(String anErrorMessage) {
		// 这里要先判断一下,是我们要替换的错误,才处理
		if (anErrorMessage
				.startsWith("the request was rejected because its size")) {
			Matcher m = Pattern.compile("\\d+").matcher(anErrorMessage);
			String s1 = "";
			if (m.find())
				s1 = m.group();
			String s2 = "";
			if (m.find())
				s2 = m.group();
			// 偷梁换柱,将信息替换掉
			super.addActionError("你上传的文件大小(" + s1 + ")超过允许的大小(" + s2 + ")");
			// 也可以改为在Field级别的错误
			// super.addFieldError("file","你上传的文件大小(" + s1 + ")超过允许的大小(" + s2 +
			// ")");
		} else {// 否则按原来的方法处理
			super.addActionError(anErrorMessage);
		}
	}

     这种解决方法的弊病是,无法将问题2来解决,下面推荐解决方案2。

     解决方案2:  将struts2的默认上传文件大小调大,在struts.xml中加入

<constant name="struts.multipart.maxSize" value="10000000" />,这样整个系统中的上传大小最大都为 10000000byte了,但是如果超过了这个大小还是出现上述问题,所以最好能设置一个超大数(汗)。然后在上传的action中设置上传文件的大小小于10000000,这样就能按照你的方式来处理了。

   

 if (file != null) {
                                      if(file.length() <= 2097152)  //大于2M 2M= 2*1024*1024
                                       { 

                                            .....

                                             ....

                                      }

                                }

 

分享到:
评论
1 楼 chuyuan_china 2014-01-07  
方案二确实很奇葩。我的是在 spring 的bean文件里 加 scope="prototype"属性。
<bean id="certificateAction" class="com.qh.client.action.CertificateAction" scope="prototype">

相关推荐

    struts2-core-2.3.31.jar

    该漏洞与Apache Struts2 (S2-045)远程代码执行漏洞原理基本相同,均是由于上传功能的异常处理函数没有正确处理用户输入的错误信息,导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意...

    深入浅出Struts2(附源码)

    作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,如数据类型转换、文件上传和下载、提高Struts 2应用的安全性、调试与性能分析、FreeMarker、Velocity、Ajax,等等。跟随作者一道深入Struts 2,聆听...

    SSM整合Spring、Struts2、Mybatis整合(new)

    SSM整合Spring、Struts2、Mybatis整合 (之前上传的有错误实在抱歉) 用MAVEN处理依赖 使用时倒入数据库,修改jdbc配置用户名密码 修改pom文件中classpath值

    Struts2介绍文档

    Struts2基本使用介绍,Strut2.0的由来,常用标签介绍,Action介绍,Struts + Spring + hibernate,表单标志使用小技巧,实现原理,具体实现,更多配置,错误处理,多文件上传等。。。。。

    struts2 标签库 帮助文档

    2. &lt;s:file&gt;&lt;/s:file&gt;-----文件上传 3. &lt;s:form action=""&gt;&lt;/s:form&gt;-----获取相应form的值 G: 1. &lt;s:generator separator="" val=""&gt;&lt;/s:generator&gt;----和标签一起使用 H: 1. &lt;s:head/&gt;-----在...

    struts2.1宝典

    15.文件上传 36 Struts2 UI tabbed pane tab pane datetime tree 37 SSH Struts+Spring+Hibernate整合 38 创建WEB工程 39 添加Struts2.1开发支持 39 添加Spring开发支持 39 添加Hibernate支持 40 添加Jar包 42 修改...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    如数据类型转换、文件上传和下载、Struts2应用的安全性、调试与性能分析、FreeMarker、Velocily、Ajax,等等。跟随作者一道深入Struts2。聆听大量来之不易的经验之谈。你对Struts2开发框架的理解和应用水平都将更上...

    strust文件上传

    //这个地方是处理上传的为M单位计算时,下一个是以kb,在下一个是byte; if(ok&gt;=1024*1024) { float ok1=(((float)ok)/1024f/1024f); DecimalFormat myformat1 = new DecimalFormat("0.00"); strFee = ...

    AnyFo - Struts 2_1爆胎易筋丸.pdf

    1.2.4 struts.xml 配置文件......................................................................................7 2 Action 研究.............................................................................

    Apache-Struts-v4

    Apache Struts 2 2.3.x之前的2.3.x版和2.5.10.1之前的2.5.x版中的Jakarta Multipart解析器在文件上传尝试期间具有错误的异常处理和错误消息生成,这使远程攻击者可以通过精心设计的Content执行任意命令-Type,...

    ssh(structs,spring,hibernate)框架中的上传下载

    WEB-INF下的applicationContext.xml为Spring的配置文件,struts-config.xml为Struts的配置文件,file-upload.jsp为文件上传页面,file-list.jsp为文件列表页面。  本文后面的章节将从数据持久层->业务层->Web层的...

    Java Web程序设计教程

    6.5.2struts2文件上传实现方式 136 6.5.3struts2文件下载实现方式 141 本章小结 143 课后练习 144 第7章 struts2中应用模板语言 145 7.1模板语言简介 145 7.2应用velocity 146 7.2.1velocity基础 146 7.2.2...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java开源包2

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    Hacking2

    Jakarta Multipart解析器(通常用于文件上传)在Apache Struts 2 2.3.x之前的2.3.32和2.5.10之前的2.5.x中具有错误的异常处理和错误消息生成过程 允许通过包含#cmd =字符串的Crefed Content-Type,Content-...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

Global site tag (gtag.js) - Google Analytics