struts2文件上传,获取文件名和文件类型
2019独角兽企业重金招聘Python工程师标准>>>
<input type="file" id="upload" name="upload"/> 这个name就是与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;}
特 别注意:,<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 FileFile[] 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名称+ContentTypeString fileNameName = inputName + "FileName";//默认就是input名称+FileNamefor (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
转载于:https://my.oschina.net/zhongwenhao/blog/651650
struts2文件上传,获取文件名和文件类型相关推荐
- 00截断上传绕过_【文件上传与解析】文件上传与解析漏洞总结v1.0
点击上方"公众号" 可以订阅哦! Hello,各位小伙伴晚上好~ 这里是依旧勤劳写公众号的小编~ 今天本公众号将推出一个新的模块,那就是漏洞知识点总结模块!!!(此处应有掌声~) ...
- SSM框架使用Layui文件上传插件实现多文件上传(多文件列表)
SSM框架使用Layui文件上传插件实现多文件上传(多文件列表) pom.xml文件的配置 想要实现SSM框架实现多文件上传,必要的jar包必须要在pom.xml文件中引入.如下: <!--co ...
- hadoop HDFS的文件夹创建、文件上传、文件下载、文件夹删除,文件更名、文件详细信息、文件类型判断(文件夹或者文件)
摘要: 本篇文章主要介绍的是hadoop hdfs的基础api的使用.包括Windows端依赖配置,Maven依赖配置.最后就是进行实际的操作,包括:获取远程hadoop hdfs连接,并对其进行的一 ...
- 使用Apache文件上传控件实现文件上传
本文使用Apache提供的第三方文件上传控件进行文件上传 1.导入第三方commons-fileupload-1.3.2.jar和commons-io-2.5.jar包 2.页面form标签需添加en ...
- 【文件上传漏洞-01】文件上传漏洞概述、防御以及WebShell基础知识补充
目录 1 文件上传漏洞概述 2 文件上传漏洞防御.绕过.利用 2.1 黑白名单策略 3 WebShell基础知识补充 3.1 WebShell概述 3.2 大马与小马 1 文件上传漏洞概述 概述:文件 ...
- jquery文件上传插件 uploadify java_jQuery文件上传插件Uploadify使用指南
对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持 Flash,主要特性:支持多文件上传.HTML5版本可拖拽上传.实时上传进度条显示.强大的参数 定制功能,如文件大小. ...
- php 拖动多个文件上传,dropzone拖拽文件上传一次上传多个文件的方法
用dropzone插件拖拽文件上传默认情况是把一个文件拖到浏览器后就立即自动上传,参考前文<用dropzone插件拖拽文件上传>,如果需要一次上传多个文件怎么办?本文将介绍其实现方法. d ...
- php 上传文件后缀名,对应PHP文件上传后缀名与文件类型
Internet上有许多PHP文件上传的处理方法,其实学习PHP的人都知道如何上传文件,但许多人可能会忽略编程中的一些细节,今天爱站技术频道小编为大家介绍对应PHP文件上传后缀名与文件类型. ie 火 ...
- 基于OkHttp 、Retrofit 、Volley 、RxJava、Novate多种网络框架整合的快速项目开发框架,一行代码实现Ftp文件上传、文件下载、文件删除和进度监听的工具类的使用
基于OkHttp .Retrofit .Volley .RxJava.Novate多种网络框架整合的快速项目开发框架,Ftp文件上传.文件下载的工具类的使用. 依赖于Ftp的jar包,对上传.下载.删 ...
- php定义上传文件格式,对应PHP文件上传后缀名与文件类型
Internet上有许多PHP文件上传的处理方法,其实学习PHP的人都知道如何上传文件,但许多人可能会忽略编程中的一些细节,今天爱站技术频道小编为大家介绍对应PHP文件上传后缀名与文件类型. ie 火 ...
最新文章
- idea中配置个人注解代码模板
- 微信公众平台开发(55)刮刮乐
- 2015年第六届蓝桥杯 - 省赛 - Java大学B组 - A. 三角形面积
- python中until函数_等待应用程序窗口:python中的pywinauto.timings.WaitUntilPasses
- 机器人总动员最后的bgm_引导你欣赏《机器人瓦力》的电影配乐
- 《Python Cookbook 3rd》笔记(3.14):计算当前月份的日期范围
- Sqlserver备份存储过程
- linux杀死进程删除文件,linux 常用到的命令 删除 移动 复制 查询端口 杀死进程 查询进程...
- 搜索 —— 启发式搜索 —— 爬山法
- 顺序栈的基本操作c语言源代码,顺序栈的栈基本操作(C语言版)
- 收发邮件服务器错误,邮件系统收发邮件报错汇总——错误代码550
- 多点触摸与单点触摸接口主要区别【转】
- Tuple Class
- 领域驱动设计(Domain Driven Design,DDD)
- 2018年java web前端(总结)前端要求和流行几个框架
- iOS小技能: UIKit
- 播布客小布老师所有视频
- 微信棋牌源码虚拟机搭建Hadoop集群
- 力扣算法之两矩形求和
- 不见的何止重城,隐隐的又岂是江树。
热门文章
- atitit.api设计 方法 指南 手册 v2 q929.docx
- atitit.基于虚拟机的启动器设计 --java 启动器 java生成exe
- paip.提升用户体验----自定义移位操作符重载
- paip.提升用户体验---注册异常记录
- Linux宝库名人轶事栏目 | 人生若只如初见,我与开源圈
- oracle的clob赋值_oracle 临时clob 和永久clob 的读取操作详解
- 【优化算法】蜜獾优化算法(HBA)【含Matlab源码 1437期】
- 【单目标优化求解】基于matlab遗传算法求解单目标优化问题【含Matlab源码 1320期】
- 【TWVRP】基于matlab遗传和模拟退火算法求解带时间窗的取送货问题【含Matlab源码 1139期】
- 【语音隐写】基于matlab小波变换算法求解水印嵌入提取【含Matlab源码 513期】