最近有个项目要用Struts1.x来做多文件上传,就是用户可以在前台动态添加任意多个文件,然后上传到服务器上。这里文件个数不定,所有没有定义到ActionForm里。于是这时候想到了Apache的FileUpload组件,但是这个组件需要通过解析HttpServletRequest对象来获取所有上传的文件对象。而通过Struts1.x的所有request都被包装成MultipartRequestWrapper,此时再在Action里再来解析request对象就不能获取到上传的FileItem对象。查看了以下Struts1.x的原码,发现,其实我们可以有一种work around的方法来获取FileItem对象,见如下方法

public Map<String, FileItem> getFileItem(ActionForm form)
    throws GuiException ...{ 

    Map<String, FileItem> map = new HashMap<String, FileItem>(); 
    
    try ...{
        Hashtable ht = form.getMultipartRequestHandler().getFileElements();
        Iterator it = ht.keySet().iterator();
        while( it.hasNext() ) ...{
            Object obj = ht.get(it.next());
            Field field = obj.getClass().getDeclaredField("fileItem");
            if( null != field ) ...{
                field.setAccessible(true);
                FileItem fileItem = (FileItem)field.get(obj);
                map.put(fileItem.getFieldName(), fileItem);
            }
        }
    }catch( Exception ex) ...{
            throw new GuiException(null, ex.getMessage());
    }
    return map;
}

此方法是通过反射来获取Struts类中一个私有的成员变量来获取上传的文件对象的,当然这只是一个临时的解决办法,并且如果要更换Struts版本,最好还是要去再测试一下,以防止类有变化。

说到这里,其实我们还有一种办法可以参考,就是使用Filter,我们可以添加一个FileUploadFilter来在struts处理之前获取FileItem对象并且用request.setAttribute方法放入request对象中。当然这只是一个想法,没有具体测试过。

转载于:https://www.cnblogs.com/wdpp/archive/2007/08/14/2386394.html

Struts1.x多文件上传问题相关推荐

  1. JavaWeb -- Struts1 多文件上传与下载 DownloadAction, DispatchAction

    1. 多文件上传与下载 上传下载jsp: <%@ page language="java" import="java.util.*" pageEncodi ...

  2. struts2.0实现文件上传

    首先,引入jar包.除了 Struts2.0的几个核心jar包外,还需要额外引入commons-fileupload.jar和commons-io.jar. 引入这两个包的时候,似乎版本也是一个比较重 ...

  3. 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s

     1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2  spring-mv ...

  4. springMVC3.0(文件上传,@RequestMapping加参数,@SessionAttributes,@ModelAttribute,转发,重定向,数值获取,传参,ajax,拦截器)

    1.项目包结构如下: 2.       spring配置文件springMVC.xml修改如下: <?xml version="1.0" encoding="UTF ...

  5. Java进阶学习第十六天(Struts框架:配置、数据处理、自动封装、日期类型转换、文件上传)

    一.Struts2配置 1.Struts2的Action开发的几种方式 ① 方式1:继承ActionSupport(一般使用方法) public class UserAction extends Ac ...

  6. web文件上传下载原理浅析

    一.web文件上传浅析 现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload.还有Struts1.x和Struts2中带的上传文件功能 ...

  7. springboot设置文件上传大小(tomcat默认1M)

    application.yml # 设置文件上传大小(tomcat默认1M) server:tomcat:max-http-form-post-size: -1 spring:servlet:mult ...

  8. 将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录

    将文件上传至ftp服务器,传入File对象,将文件上传至ftp服务器 需要配置修改的点: 1. 服务器ip端口(服务器ip 端口22/21). 2. 服务器账号密码(服务器登录用户名密码). 3. 上 ...

  9. Springboot 多文件上传

    其实多个文件和单个文件上传是一样的,可以使用同一个Controller 添加依赖 <!-- https://mvnrepository.com/artifact/commons-fileuplo ...

最新文章

  1. [crypto]-51.1-python的aes加解密/rsa生成密钥对/rsa加解密/hmac加密
  2. JavaScript面向对象——深入理解原型继承
  3. [翻译] 初看 ASP.NET Core 3.0 即将到来的变化
  4. mybatis if-else(写法)
  5. _java5条件阻塞Condition的应用
  6. 015、JVM实战总结:大厂面试题:什么情况下JVM内存中的一个对象会被垃圾回收?
  7. sql数据库查询聚合函数_如何使用SQL Server数据质量服务确保正确的数据聚合
  8. 《剑指 Offer I》刷题笔记 20 ~ 30 题
  9. What?一周内咸鱼疯转2.4W次,最终被所有大厂封杀!
  10. (转)今天的人工智能比肩工业革命毫不夸张
  11. 数据库SQL语言从入门到精通--Part 1--SQL语言概述
  12. html 播放wav,js播放wav文件(源码)
  13. java爬虫爬取b站视频分享iframe代码并保存10000条数据到数据库
  14. 《穿透:像社会学家一样思考》简述
  15. 增长黑客读书笔记(一)搭建增长团队
  16. 我搭的神经网络不 work 该怎么办!看看这 11 条新手最容易犯的错误
  17. php执行shell脚本
  18. 鸡嗉囊炎有哪些症状 什么药防治鸡嗉囊肿大
  19. python输入一个三位整数、求逆序数_输入一个三位正整数,要求其输出对应的逆序数...
  20. sql增删改查语句实例

热门文章

  1. bzoj 1726: [Usaco2006 Nov]Roadblocks第二短路(A*第k短路)
  2. bzoj 1677: [Usaco2005 Jan]Sumsets 求和(DP)
  3. np.random.uniform,random,choice,newaxis
  4. 安卓服务service全解,生命周期,前台服务、后台服务,启动注销、绑定解绑,注册
  5. Echarts数据可视化tooltip提示框,开发全解+完美注释
  6. 腾讯云配置Ubuntu使用SSH登录
  7. 贺利坚老师汇编课程37笔记:运用栈加两层循环之把六个字符串里的字母都改写成大写字母
  8. AD画电路的踩坑点——继电器线圈的正负性以G6K-2F-Y为例
  9. Vue、J2ee - 001 : Vue项目的创建过程
  10. 栈增长方向与大端/小端问题