`
Mojarra
  • 浏览: 128877 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Fastupload 0.4.7发布,支持struts2

阅读更多

Fastupload 0.4.7这个版本中主要增加了支持struts2的文件上传功能的“插件”,修复了解析IE7,IE8下某些版本上传的请求数据中文件名问题(这里感谢lkclkc 网友报的bug及提供的解决思路)。


使用struts的“插件”示例代码如下

public class StrutUploadAction2 extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = -5528908878055619784L;
	
	private File photo;

	@Override
	public String execute() throws Exception {
		System.out.println(photo); // 如何处理这个文件的代码省略
                return super.execute();
	}
        // ...此处省略 getters & setters ...
}

 

在工程的struts配置文件里,增加fastupload的multipartrequest接口定义,并指定fastupload为默认的multipart handler

<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="fastupload" class="org.apache.struts2.dispatcher.multipart.FastUploadMultiPartRequest" scope="default" />
<constant name="struts.multipart.handler" value="fastupload" />
<constant name="fastupload.parse.type" value="direct"/>
 

最后,运行.... :)


受限于struts2中对于multipart/form-data请求的处理方式,又不想侵入struts2源码,这里给出一种“符合struts2中处理的方式“,因为fastupload已经做到完全用内存来处理multipart/form-data请求,完全不用临时文件来转存,这种处理方式在另外一篇博客里有详细介绍,《白话MVC(四)为Struts2编写文件上传插件 》。


到目前为止,这个插件虽然可以解决在struts2框架中不能使用fastupload api解析文件的问题,但受限于struts2中对于multipart/form-data请求的处理,插件自废了武功,完全发挥fastupload的威力,需要修改struts2的源码,甚至弃用apache commons fileupload,是一个巨复杂的事情,这个要和struts2开发小组讨论。

 

 

 

介绍

fastupload根据RFC 1867文档规范,编写的基于表单文件上传的组件,支持表单多文件上传,二进制文件与文本文件分开处理,彻底解决上传文本文件编码问题,支持文件上传大小限制,支持文件上传进度计算,api接口简明,比Apache Common File Upload速度快、稳定性高,无需任何第三方库的支持。


完整的功能列表

  1. 支持上传多个文件
  2. 支持sub-boundary
  3. 提供“一次性”的编码解决方案
  4. “预先“的过滤机制
  5. 支持struts2
  6. 支持单个上传文件大小限制,支持上传请求大小限制
  7. 支持文件上传进度

项目地址: https://sourceforge.net/projects/fastupload/

相关的博客:http://mojarra.iteye.com/category/222356


fastupload的未来:与Spring MVC的集成正在开发之中,与Struts2的集成的下一步工作正在计划之中,Tomcat7集成还在蓝图之中。

为了完成这些计划和蓝图,fastupload召集开源志愿者,http://mojarra.iteye.com/blog/1696697

分享到:
评论
8 楼 sun_flowery 2012-11-07  
谢谢您的解答~~
7 楼 Mojarra 2012-11-07  
比如说,把大文件分块,并编码,目前这个功能所有的浏览器都不支持。


sun_flowery 写道

您说的在客户端做一些特别的支持是指?需要一些组件或者什么的,比如说
ActiveX和Sliverligt等类似的这些插件?

6 楼 sun_flowery 2012-11-07  
Mojarra 写道
RFC 1867只规定了一次请求数据的上传,因为http协议是无状态的,所以,断点后的“传输状态”是没有办法获得的,除非在客户端做一些特别的支持。

你提的这个问题很好,完成这个功能,只靠服务器端的代码是完成不了的,必须和客户端配合,一起完成,比如把文件分块上传,然后再组装,还有一个可能的方案是借助异步Servlet请求来完成。


sun_flowery 写道
Mojarra 写道
是断点续传吗?

sun_flowery 写道
请问您有这个断点上传的例子?


嗯,断点上传和断点下载,就是断点续传~~


您说的在客户端做一些特别的支持是指?需要一些组件或者什么的,比如说
ActiveX和Sliverligt等类似的这些插件?
5 楼 Mojarra 2012-11-07  
RFC 1867只规定了一次请求数据的上传,因为http协议是无状态的,所以,断点后的“传输状态”是没有办法获得的,除非在客户端做一些特别的支持。

你提的这个问题很好,完成这个功能,只靠服务器端的代码是完成不了的,必须和客户端配合,一起完成,比如把文件分块上传,然后再组装,还有一个可能的方案是借助异步Servlet请求来完成。


sun_flowery 写道
Mojarra 写道
是断点续传吗?

sun_flowery 写道
请问您有这个断点上传的例子?


嗯,断点上传和断点下载,就是断点续传~~

4 楼 sun_flowery 2012-11-07  
Mojarra 写道
是断点续传吗?

sun_flowery 写道
请问您有这个断点上传的例子?


嗯,断点上传和断点下载,就是断点续传~~
3 楼 Mojarra 2012-11-07  
是断点续传吗?

sun_flowery 写道
请问您有这个断点上传的例子?

2 楼 sun_flowery 2012-11-07  
就是struts2的断点上传~~
1 楼 sun_flowery 2012-11-07  
请问您有这个断点上传的例子?

相关推荐

Global site tag (gtag.js) - Google Analytics