`
xinklabi
  • 浏览: 1591291 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

Struts2上传文件过大的反馈处理

 
阅读更多

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

 

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

 

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

 

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

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

 

Java代码 复制代码 收藏代码
  1. /**
  2. * 替换文件上传中出现的错误信息 引用 import java.util.regex.Matcher; import
  3. * java.util.regex.Pattern;
  4. *
  5. */
  6. @Override
  7. public void addActionError(String anErrorMessage) {
  8. // 这里要先判断一下,是我们要替换的错误,才处理
  9. if (anErrorMessage
  10. .startsWith("the request was rejected because its size")) {
  11. Matcher m = Pattern.compile("\\d+").matcher(anErrorMessage);
  12. String s1 = "";
  13. if (m.find())
  14. s1 = m.group();
  15. String s2 = "";
  16. if (m.find())
  17. s2 = m.group();
  18. // 偷梁换柱,将信息替换掉
  19. super.addActionError("你上传的文件大小(" + s1 + ")超过允许的大小(" + s2 + ")");
  20. // 也可以改为在Field级别的错误
  21. // super.addFieldError("file","你上传的文件大小(" + s1 + ")超过允许的大小(" + s2 +
  22. // ")");
  23. } else {// 否则按原来的方法处理
  24. super.addActionError(anErrorMessage);
  25. }
  26. }
/**
	 * 替换文件上传中出现的错误信息 引用 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,这样就能按照你的方式来处理了。

 

Java代码 复制代码 收藏代码
  1. if (file != null) {
  2. if(file.length() <= 2097152) //大于2M 2M= 2*1024*1024
  3. {
  4. .....
  5. ....
  6. }
  7. }
 if (file != null) {
                                      if(file.length() <= 2097152)  //大于2M 2M= 2*1024*1024
                                       { 

                                            .....

                                             ....

                                      }

                                }

 

分享到:
评论
2 楼 你有罪 2013-03-09  
我发觉struts2上传文件时是先将文件上传到服务器中,上传完了后执行后台action的上传方法,如果上传文件很大的时候,很久都不会进到ACTION的方法,而且强行中断后struts会报错并返回一个input的视图。
1 楼 Navee 2012-10-29  
第二个办法太暴力了````

相关推荐

    struts2文件上传实例

    后者更为常用,因为它提供了更丰富的功能,如处理大文件分块上传、内存和磁盘存储策略等。在Action类中,你可以使用`FileUpload`类解析请求中的文件。 5. **文件存储**:解析出文件后,你需要将文件保存到服务器的...

    struts2文件上传和下载

    Struts2允许设置最大上传文件大小,并通过`filter-mapping`配置限制可接受的MIME类型。 6. **错误处理与反馈**: 在处理文件上传和下载时,可能会出现各种异常,如文件不存在、磁盘空间不足等。因此,需要适当的错误...

    struts2(ssh)带进度条文件上传 demo 的jar包1

    在Struts2的配置文件(struts.xml)中,我们需要添加相应的拦截器来处理文件上传请求。这个"struts2(ssh)带进度条文件上传 demo 的jar包1"可能是为了演示如何实现这一功能,但由于描述中提到权限问题,jar包被分成...

    struts2 单文件,多文件上传及拦截器实现异常处理

    总的来说,Struts2的文件上传功能结合拦截器机制,使得开发者能够轻松地处理用户上传的文件,同时确保系统在出现异常时能有良好的反馈和恢复机制。通过深入理解这一过程,你可以构建出更健壮和用户友好的web应用。

    struts2上传和下载文件详细源码

    - 错误处理:可能包括处理文件上传过程中可能出现的异常,如文件过大、类型不合法等。 4. 实战经验: 对于初学者,这个源码可以帮助理解实际项目中如何运用Struts2进行文件操作。通过阅读源码,可以学习到如何...

    struts2文件上传下载

    用户上传文件后,表单提交至`/fileManage/upload`这个URL地址,并由Struts2框架调用`UploadAction`的`execute()`方法进行处理。 ### Struts2文件下载知识点 虽然给定文件的内容中没有直接提及文件下载的实现方法,...

    Struts2实现多文件上传

    需要注意的是,实际应用中还要考虑文件的安全性,例如防止文件覆盖、限制上传文件类型和大小,以及处理可能出现的异常情况。同时,对于文件保存路径的设置,应当避免硬编码,以提高代码的可维护性和安全性。

    struts框架-文件上传下载

    此外,还可以使用Struts2的`ParametersInterceptor`拦截器来处理文件上传。 二、文件下载 1. 创建下载服务:在Struts框架中,通常通过一个Action来提供文件下载服务。Action需要根据请求参数找到待下载文件的路径...

    struts2上传文件

    6. **错误处理与反馈**: 在处理过程中,可能会遇到文件过大、类型不符等问题。因此,你需要进行错误检查并在必要时向用户返回错误信息。 7. **安全考虑**: 为了防止恶意文件上传,如上传脚本文件执行攻击,需要对...

    Struts2实现文件上传功能

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web框架,它极大地简化了Java web应用的开发工作。在Struts2中,文件上传是一个常见的需求,尤其在用户需要提交表单并附带文件时。下面将详细阐述如何...

    ext struts2 swfupload 跨域文件上传

    总结起来,"ext struts2 swfupload 跨域文件上传"是关于如何使用EXTJS构建前端界面,结合Struts2处理服务器端逻辑,利用SwfUpload的跨域能力实现文件上传的一种解决方案。这个过程中涉及的技术包括JavaScript编程、...

    jsp+struts文件上传

    2. 创建上传文件的JSP页面。 3. 编写Action类,使用Apache Commons FileUpload处理文件。 4. 验证和保存上传的文件。 5. 显示上传结果。 通过这种方式,你可以构建一个灵活且易于维护的文件上传系统。记住,文件...

    struts2 批量上传 图片+文件

    文件上传可能会出现各种错误,比如文件过大、网络中断等,因此需要在Action中捕获并处理这些异常,给出相应的反馈信息。 7. **性能优化**: 如果文件数量巨大,可以考虑分批次上传,或者使用多线程上传,以提高...

    struts多文件上传

    文件上传过程中可能会出现各种错误,如文件过大、类型不正确等。在Action类中捕获这些异常,并根据需要重定向到错误页面。 7. **使用第三方库**: 虽然Struts1.2本身支持基本的文件上传,但处理大型文件或复杂的...

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

    在处理用户交互,特别是文件上传时,Struts2提供了一种便捷的方式。然而,文件上传功能也涉及到一个重要的问题,那就是大小限制。在实际应用中,为了防止恶意用户上传大文件导致服务器资源耗尽,或者保护服务器免受...

    struts2上传文件,批量上传文件,需要的直接下载

    Struts2是一个强大的Java web应用程序框架...以上就是关于"Struts2批量上传文件"的基本实现和相关知识点,希望对你有所帮助。在实际项目中,根据具体需求,可能还需要考虑性能优化、并发处理以及文件的版本控制等问题。

    Struts2实现Uploadify多文件上传

    Struts2是一个强大的MVC...通过以上步骤,我们可以利用Struts2和Uploadify实现多文件上传功能,为用户提供友好的上传体验,同时确保服务器端能正确处理和存储上传的文件。在实际项目中,应根据具体需求进行定制和优化。

    java struts2实现文件上传进度条显示

    在Java Struts2框架中实现文件上传进度条显示,主要涉及到的技术点包括Struts2的文件上传、Ajax异步通信以及前端进度条组件的使用。下面将详细讲解这些知识点。 首先,Struts2的文件上传功能是通过Struts2提供的`...

    struts2+ajax文件进度条的实现

    在Struts2中实现文件上传功能,通常会涉及到处理大文件、用户体验优化等问题,如显示文件上传进度条。这个场景下,我们结合Ajax技术,可以创建一个实时反馈文件上传进度的动态界面,提升用户交互体验。 首先,我们...

    struts2异步多文件上传和下载

    在配置方面,Struts2的配置文件(struts.xml)需要设置允许文件上传的相关参数,如最大上传文件大小、临时文件目录等。此外,为了处理文件下载,你需要在Action中提供一个方法,该方法负责读取文件内容并将其设置到...

Global site tag (gtag.js) - Google Analytics