文档章节

struts2文件上传,获取文件名和文件类型

jxlgzwh
 jxlgzwh
发布于 2016/04/01 23:14
字数 752
阅读 322
收藏 6
Action中还有两个属性:uploadFileName和uploadContentType,这两个属性分别用于封装上传文件的文件名、 文件类型。这是Struts2设计的独到之处:Strut2的Action类直接通过File类型属性直接封装了上传文件的文件内容,但这个File属性 无法获取上传文件的文件名和文件类型,所以Struts2就直接将文件域中包含的上传文件名和文件类型的信息封装到uploadFileName和 uploadContentType属性中,也就是说Struts2针对表单中名为xxx的文件域,在对应的Action类中使用3个属性来封装该文件域 信息:
l 类型为File的xxx属性:用来封装页面文件域对应的文件内容。
l 类型为String的xxxFileName属性:用来封装该文件域对应的文件的文件名。
l 类型为String的xxxContentType属性:用来封装该文件域应用的文件的文件类型。

以下是实际java代码:

jsp页面:

<input type="file" id="upload" name="upload"/>  这个name就是与Action的属性对应




Action类代码:

private File upload;
    private String uploadFileName;
    private String uploadContentType;

    public void setUpload(File upload) {
        this.upload = upload;
    }
    
    public void setUploadFileName(String uploadFileName) {
        this.uploadFileName = uploadFileName;
    }

    public void setUploadContentType(String uploadContentType) {
        this.uploadContentType = uploadContentType;
    }




设置3个属性。分别给set方法. 这样子,就能够获取上传的文件,文件名,文件类型。

注意:这个uploadFileName,uploadContentType。如果File 属性名xxx(private File xxx;) 。那这个必须是xxxFileName, xxxContentType。然后也是分别给set 方法就可以。

特 别注意:,<s:file/>标志不仅仅是绑定到upload,还有uploadContentType(上传文件的MIME类型)和 uploadFileName(上传文件的文件名,该文件名不包括文件的路径)。因此,<s:file name="xxx" />对应Action类里面的xxx、xxxContentType和xxxFileName三个属性。

struts2上传文件的时候,action里面获取上传文件的文件名和类型的原理是什么?

在jsp页面代码;


<s:file name="upload" label="上传的文件" />



action中,声明代码:

private File upload;  
private String uploadContentType; // 文件的内容类型  
private String uploadFileName; // 上传文件名





这里有个疑问, 文件名和文件类型是如何获取的?

约定,在struts2内部的的FileUploadInterceptor完成的

String[] fileName = multiWrapper.getFileNames(inputName);//得到请求的所有文件名

                if (isNonEmpty(fileName)) {
                    // get a File object for the uploaded File
                    File[] files = multiWrapper.getFiles(inputName);
                    if (files != null && files.length > 0) {
                        List<File> acceptedFiles = new ArrayList<File>(files.length);
                        List<String> acceptedContentTypes = new ArrayList<String>(files.length);
                        List<String> acceptedFileNames = new ArrayList<String>(files.length);
                        String contentTypeName = inputName + "ContentType";//默认就是input名称+ContentType
                        String fileNameName = inputName + "FileName";//默认就是input名称+FileName

                        for (int index = 0; index < files.length; index++) {
                            if (acceptFile(action, files[index], fileName[index], contentType[index], inputName, validation, ac.getLocale())) {
                                acceptedFiles.add(files[index]);
                                acceptedContentTypes.add(contentType[index]);
                                acceptedFileNames.add(fileName[index]);
                            }
                        }

                        if (!acceptedFiles.isEmpty()) {
                            Map<String, Object> params = ac.getParameters();//添加到parameters中 这样就可以通过OGNL注入到action了

                            params.put(inputName, acceptedFiles.toArray(new File[acceptedFiles.size()]));
                            params.put(contentTypeName, acceptedContentTypes.toArray(new String[acceptedContentTypes.size()]));
                            params.put(fileNameName, acceptedFileNames.toArray(new String[acceptedFileNames.size()]));
                        }
                    }


参考文档:

http://blog.163.com/linfenliang@126/blog/static/127857195201171205937621/

http://www.iteye.com/problems/89011



© 著作权归作者所有

jxlgzwh
粉丝 56
博文 340
码字总数 161903
作品 1
深圳
程序员
私信 提问
struts2文件上传获取文件名、文件类型

开发公司项目时遇到这样一个问题,当前端上传一个文件到后台action类中,发现取出来的文件名、文件类型都变了。这是为什么呢?我们又该怎么获取文件名称和文件类型呢?于是找了大量的资料发现...

小黄狗
2018/09/28
57
0
Struts文件上传,获取文件名和文件类型

Action中还有两个属性:uploadFileName和uploadContentType,这两个属性分别用于封装上传文件的文件名、文件类型。这是Struts2设计的独到之处:Strut2的Action类直接通过File类型属性直接封装...

山海经
2014/03/04
99
0
struts文件上传,获取文件名和文件类型

Action中还有两个属性:uploadFileName和uploadContentType,这两个属性分别用于封装上传文件的文件名、 文件类型。这是Struts2设计的独到之处:Strut2的Action类直接通过File类型属性直接封...

Jonson
2013/04/19
4.7K
0
Struts2文件的上传和下载

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

倚小丁
2010/11/01
1K
3
Java程序员从笨鸟到菜鸟之(七十一)细谈struts2(十三)struts2实现文件上传和下载详解

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

长平狐
2012/11/12
546
1

没有更多内容

加载失败,请刷新页面

加载更多

为什么要在网站中应用CDN加速?

1. 网页加载速度更快 在网站中使用CDN技术最直接的一个好处就是它可以加快网页的加载速度。首先,CDN加速的内容分发是基于服务器缓存的,由于CDN中缓存了不少数据,它能够给用户提供更快的页...

云漫网络Ruan
29分钟前
4
0
亚玛芬体育(Amer Sports)和信必优正式启动合作开发Movesense创新

亚玛芬体育和信必优正式启动合作开发Movesense创新,作为亚玛芬体育的完美技术搭档,信必优利用Movesense传感器技术为第三方开发移动应用和服务。 Movesense基于传感器技术和开放的API,测量...

symbiochina88
40分钟前
3
0
创龙TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA核心板规格书

SOM-TL437xF是一款广州创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA芯片设计的核心板,采用沉金无铅工艺的10层板设计,适用于高速数据采集和处理系统、汽车导航、工业自动化等领...

Tronlong创龙
41分钟前
3
0
好程序员Java学习路线分享MyBatis之线程优化

  好程序员Java学习路线分享MyBatis之线程优化,我们的项目存在大量用户同时访问的情况,那么就会出现大量线程并发访问数据库,这样会带来线程同步问题,本章我们将讨论MyBatis的线程同步问...

好程序员官方
47分钟前
6
0
IDEA 自定义方法注解模板

IDEA 自定义方法注解模板 1、使用效果 /*** 计算交易费用* @Author wangjiafang* @Date 2019/9/11* @param feeComputeVo* @return*/@PostMapping("/v1/fee_compute")public ApiResp......

小白的成长
47分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部