文档章节

Struts2 多种方式接收表单文件

z
 zyb86
发布于 2016/12/21 14:55
字数 729
阅读 48
收藏 0

1. 通过定义Action属性,接收文件

 html: <input type="file" name="file1">

action定义与input name相同的属性

 private File file1;
 private String file1FileName;
 private String file1ContentType;

表单提交后,Action会自动给属性赋值,FileName,ContentType可以不定义,但是File file1必须定义;

多文件上传:

html: 需要定义多个name相同的input

<input type="file" name="file1">

<input type="file" name="file1">

action :文件接收对象定义为List

private List<File> file1;
 private List<String> file1FileName;
 private List<String> file1ContentType;

表单提交后可以文件集合对象:

file1:

[\temp\upload_d312fc99_d4d5_4eec_a90a_666476e67579_00000031.tmp, \temp\upload_d312fc99_d4d5_4eec_a90a_666476e67579_00000032.tmp]

file1FileName:[1.jpg, 2.png]

file1ContentType : [image/jpeg, image/png]

通过文件集合的index获取对应的文件对象;

2. 通过Map接收文件对象

有时我们并不希望在action中定义太多的属性对象来接收form数据,因为那样看起来很不爽,或者如果我们上传多个文件,每个文件input的name都不一样,那么我们是不是就在action中定义很多个File 属性接收文件,很显然这样是不可取;

通过在action定义一个Map 属性变量,不仅可以接收多文件,而且可以接收页面动态产生的input file 对象;

如:

html :

<input type="file" name="fileMap.file1"><br/><br/>
<input type="file" name="fileMap.file1"><br/><br/>
<input type="file" name="fileMap.file2"><br/><br/>

action :

private Map<String,Object> fileMap;

表单提交后 fileMap接收到form数据如下:

    file2FileName : [3.png]
    file2ContentType : [image/png]
    file2 : [\temp\upload_6dc13bae_7ae0_4f3b_98a4_1ce228a26405_00000016.tmp]

    file1FileName : [1.jpg,2.png]
    file1ContentType : [image/jpeg,image/png]
    file1 :     [

        \temp\upload_6dc13bae_7ae0_4f3b_98a4_1ce228a26405_00000014.tmp

        ,\temp\upload_6dc13bae_7ae0_4f3b_98a4_1ce228a26405_00000015.tmp

]

.tmp是服务器临时文件,map里面的value值都是以数组形式存储,表单名称成相同的文件会放到同一数组中,这样无论多文件还是单文件都可以完成同一接收;

3. 通过Request包装类获取文件

Struts2请求包装类StrutsRequestWrapper,MultiPartRequestWrapper

当form enctype="multipart/form-data"时,HttpServletRequest实现类为MultiPartRequestWrapper;

普通表单提交时,HttpServletRequest实现类为StrutsRequestWrapper;

示例:

html :

<input type="file" name="file1"><br/><br/>
<input type="file" name="file1"><br/><br/>
<input type="file" name="file2"><br/><br/>

action 处理如下:

//获取request对象

HttpServletRequest request=ServletActionContext.getRequest();

//判断request实现类

if(request instanceof MultiPartRequestWrapper){
   try {
    MultiPartRequestWrapper multiRequest=(MultiPartRequestWrapper) request;
    String[] fileNames=multiRequest.getFileNames(fieldName);
    String[] contentTypes=multiRequest.getContentTypes(fieldName);
    File[] files=multiRequest.getFiles(fieldName);
   } catch (Exception e) {
    // TODO: handle exception
   }
  }

fieldName为表单name值;

当fieldName="file1" , 获取file1文件:

String[] fileNames=[1.jpg,2.png];
String[] contentTypes = [image/jpeg,image/png];
File[] files =  [

        \temp\upload_6dc13bae_7ae0_4f3b_98a4_1ce228a26405_00000014.tmp

        ,\temp\upload_6dc13bae_7ae0_4f3b_98a4_1ce228a26405_00000015.tmp

]

当fieldName="file2" , 获取file2文件:

String[] fileNames = [3.png];
String[] contentTypes =  [image/png];
File[] files= [\temp\upload_6dc13bae_7ae0_4f3b_98a4_1ce228a26405_00000016.tmp];

方法2 与 方法3 都能实现动态接收任意文件,而相比之下,方法2看着有些别扭,并不符合常规编码习惯,应该很少有程序猿使用map接收数据;而方法3则相比较灵活; 

本文转载自:https://my.oschina.net/zjds/blog/715574

z
粉丝 0
博文 4
码字总数 664
作品 0
南京
私信 提问
Struts2 多种方式接收表单文件

通过定义Action属性,接收文件 html: <input type="file" name="file1"> action定义与input name相同的属性 private File file1; private String file1FileName; private String file1Conten......

Sobey
2016/07/21
71
0
Java程序员从笨鸟到菜鸟之(七十一)细谈struts2(十三)struts2实现文件上传和下载详解

文件上传和文件下载是我们在web应用程序中常用的两个功能,在java中,实现这两种功能的方式也有很多种,其中struts2就给我们提供了一种算是比较简单的方式吧,下面我们就一起来看一下,首先我...

长平狐
2012/11/12
547
1
Struts2的其它知识

4、Struts2的其它知识 4.1、ModelDriven 如果希望传递对象信息到action,但对象信息较多时,需要传递大量的参数并且要设置这些参数,工作量 很大,所以建议的方式是在action中直接创建相应的...

pmos
2016/11/02
16
0
Struts2文件的上传和下载

文件上传的原理: 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1) application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种...

倚小丁
2010/11/01
1K
3
Struts2 文件上传 对XHR的请求 (ajax + formData 上传的文件) 拿不到文件

Struts2 对文件上传是通过 file upload 拦截器实现的,具体引入方法见这里。然而 File Upload 拦截器似乎对于 XHR 过来的文件上传请求无法响应。 MMP老子试了半天。 用ajax + formData 的方式...

小黄狗
2018/10/01
324
0

没有更多内容

加载失败,请刷新页面

加载更多

分页查询

一、配置 /*** @author beth* @data 2019-10-14 20:01*/@Configurationpublic class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ ......

一个yuanbeth
昨天
5
0
在LINQPad中使用Ignite.NET

LINQPad是进行.NET开发的一款优秀工具,非常有利于Ignite.NET API的快速入门。 入门 下载LINQPad:linqpad.net/Download.aspx,注意要选择64位操作系统的AnyCPU版本; 安装Ignite.NET的NuGet...

李玉珏
昨天
7
0
JS其他类型值转化为Boolean类型规则

本文转载于:专业的前端网站➤JS其他类型值转化为Boolean类型规则 由于最近在笔试的时候,发现好多关于其他类型转化为Boolean类型的题目,因此总结一下! 一、String类型转化为Boolean 1.转化...

前端老手
昨天
7
0
EurekaClient自动装配及启动流程解析

在上篇文章中,我们简单介绍了EurekaServer自动装配及启动流程解析,本篇文章则继续研究EurekaClient的相关代码 老规矩,先看spring.factories文件,其中引入了一个配置类EurekaDiscoveryClie...

Java学习录
昨天
11
0
析构函数是否必须为虚函数?为何?

p517 在C++中,基类指针可以指向一个派生类的对象。如果基类的析构函数不是虚函数,当需要delete这个指向派生类的基类指针时,就只会调用基类的析构函数,而派生类的析构函数无法被调用。容易...

天王盖地虎626
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部