首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > Apache >

Ext + org.apache.commons.fileupload下传文件

2012-08-31 
Ext + org.apache.commons.fileupload上传文件在项目中一直使用struts的FormFile上传文件,后来发现这种方

Ext + org.apache.commons.fileupload上传文件
      在项目中一直使用struts的FormFile上传文件,后来发现这种方式存在一些缺陷:上传前后文件的大小不一致,主要取决于写入stream的时候byte数组大小的设置,
code="java"]
            byte[] temp = new byte[BUFFER_SIZE];
            BufferedInputStream bi = new BufferedInputStream(file.getInputStream(),BUFFER_SIZE);
            BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(tempPath));
            while (bi.read(temp) != -1) {
                bo.write(temp);
            }[

如果数组大小设置为1024字节,则每次写入1024字节,但是,如果在最后一次写入的时候原始文件中的字节数不到1024,这是仍然写入1024字节,这就导致在上传文件前后,文件大小不一致的问题,为了解决这个问题采用了apache的commons.fileupload上传文件,此方式在上传前后文件大小一致,至于是如何write的需要进一步研究。具体方式如下:

1. 前台ext需要设置formPanel的fileUpload属性为true,如果前台用jsp需要设置表单form的enctype="multipart/form-data"属性。

2. formPanel用submit方式提交。  

上传文件部分代码如下:

     <forward name="success" path="/success.jsp" />
</action>

现象:在struts-config.xml文件中,如果指定了formbean——name="TestForm" ,则文件无法正确上传,UploadAction中的fu.parseRequest( request)方法返回值为null;如果去掉了说明formbean的name属性,则文件可以正常上传。

原因:struts的RequestProccessor.process已经包含了处理文件上传的方法。如果在action配置中设置了formbean ,那么在你自己的action处理request之前,struts已经在RequestProccessor.populate方法中处理了request,因此,在自己的action中就取不到上传的文件了。

处理:如果要自己在action中处理文件上传工作,那么就不要在配置文件中配置formbean。


感谢http://hi.baidu.com/xiaweizhao_java/blog/item/daa8dff856209569024f56e1.html的作者!

热点排行