正式学习文件上传之前,需要搞清楚一件事,所谓的文件上传指的就是用户将本地文件通过某种方式提交到服务器端,然后保存在服务器端主机的某个地方,跟文件下载不同的是,文件下载需要解决的是文件如何从服务器到客户端,那么文件上传正好相反,需要研究客户端从服务器端的过程,搞清楚这个,问题就好办多了,另外Struts2中使用{fileupload}拦截器来处理用户的文件上传操作,好的看下面的表单:

 <form name="myForm" enctype="multipart/form-data" action="upload" method="post"><input type="file" name="myDoc" /> <input type="submit" value="上传" /></form>

文件上传中,需要采用post方式提交,且将enctype设置为“multipart/form-data”,另外需要注意输入项类型为file的name属性值为myDoc,再看处理文件上传的Action类的配置,

package com.struts2.action;import java.io.File;import com.opensymphony.xwork2.ActionSupport;public class UploadAction extends ActionSupport {// 用来接收前台上传过来的文件信息private File myDoc;// 上传文件的MIME类型private String myDocContentType;// 上传文件的名称private String myDocFileName;@Overridepublic String execute() throws Exception {return SUCCESS;}public File getMyDoc() {return myDoc;}public void setMyDoc(File myDoc) {this.myDoc = myDoc;}public String getMyDocContentType() {return myDocContentType;}public void setMyDocContentType(String myDocContentType) {this.myDocContentType = myDocContentType;}public String getMyDocFileName() {return myDocFileName;}public void setMyDocFileName(String myDocFileName) {this.myDocFileName = myDocFileName;}}

一般,我们可以看到提交表单文件上传输入项的name属性值为myDoc,所以需要在UploadAction里面提供三个属性:File类型的myDoc属性、String类型的myDocContentType属性、String类型的myDocFileName属性,一定要记住这几个属性的前缀一定要与表单里面的name属性值保持一致,否则就无法赋值,切记!!

文件一旦上传到服务器端被Action类的接收到之后,这个问题就转化问普通本地的IO流操作了,就可以按照自己的设计将文件放置到任意位置,此时如果你的上传文件大小超过2M大小,就会抛出异常,这是怎么回事呢?原因在于Struts2的默认配置中,对文件上传处理做了些默认配置,因此如果需要,Struts2中支持修改文件上传的请求解析器、文件存储的临时目录以及文件上传大小的限制,先看如下Struts2默认配置:

### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data
# struts.multipart.parser=cos
# struts.multipart.parser=pell
# struts.multipart.parser=jakarta-stream
#可以设置文件上传请求由哪个框架进行解析
struts.multipart.parser=jakarta
# uses javax.servlet.context.tempdir by default
#文件上传的临时目录
struts.multipart.saveDir=
#文件上传的最大byte数
struts.multipart.maxSize=2097152

我们既可以在src目录下新建一个struts.properties文件来修改默认设置,

#将文件上传大小的限制设置为10M
struts.multipart.maxSize=10485760

也可以在struts.xml中,通过常量的形式修改:

<constant name="struts.multipart.maxSize" value="10485760"/>

好的,说完了单个文件上传,再来谈谈批量上传,批量上传指的是在一次文件上传请求中,同时上传多个文件,这个对于Struts2更是小菜一碟,只需做少量改动,需要将Action的三个属性分别变为对应的数组类型即可,看例子:

为了满足批量上传,表单的修改如下:

 <form name="myForm" enctype="multipart/form-data" action="upload" method="post"><input type="file" name="myDoc" /><input type="file" name="myDoc" /> <input type="file" name="myDoc" /> <input type="submit" value="批量上传" /></form>

struts.xml中的配置无需做任何变动,看Action类的变化,由于要处理批量上传,所以需要将对应类型变为数组类型,看配置:

package com.struts2.action;import java.io.File;import com.opensymphony.xwork2.ActionSupport;public class UploadAction2 extends ActionSupport {// 用来接收前台上传过来的文件信息private File[] myDoc;// 上传文件的MIME类型private String[] myDocContentType;// 上传文件的名称private String[] myDocFileName;@Overridepublic String execute() throws Exception {return SUCCESS;}public File[] getMyDoc() {return myDoc;}public void setMyDoc(File[] myDoc) {this.myDoc = myDoc;}public String[] getMyDocContentType() {return myDocContentType;}public void setMyDocContentType(String[] myDocContentType) {this.myDocContentType = myDocContentType;}public String[] getMyDocFileName() {return myDocFileName;}public void setMyDocFileName(String[] myDocFileName) {this.myDocFileName = myDocFileName;}}

属性类型变为数组类型后,毫无疑问每个数组相同索引对应的是同一个上传文件,上传的文件可以通过迭代相应的数组进行处理,需要注意的是也可以用List类型来代替数组类型,结果都是一样;

基本配置如上了,但是另一个问题来了,用户不能随便上传任意大小的任意类型的文件,所以Struts2通过使用fileUpload拦截器对文件上传大小和类型的限制;

1、首先说说对大小的限制,Struts2中提供了两种方式对文件大小进行限制,分别为通过设置struts.multipart.maxSize和fileUpload拦截器的maximumSize属性进行实现文件大小控制,那么它俩有什么区别呢?前者是控制一次上传请求过程称,所有上传文件大小的和,而后者是对上传文件中每个文件的大小,需要注意这一点,在说说对文件类型的控制,文件类型也是通过fileUpload拦截器进行设置的,下面通过一个配置来设置每个上传文件的大小以及文件类型的控制:

 <action name="upload" class="com.ognl.action.UploadAction"><result name="success">/index.jsp</result><interceptor-ref name="fileUpload"><!-- 设置Struts2允许上传文件的最大比特数 --><param name="maximumSize">5242880</param><!-- 允许上传文件的MIME类型 --><param name="allowedTypesSet">image/jpeg,image/gif</param></interceptor-ref>

2、设置临时目录

由于Struts2框架在将文件正式传递到一个Action之前,会首先将文件保存到一个临时目录中,默认情况下同javax.servlet.context.tempdir相同路径,如果想要自主设置该目录的话,可以在struts.properties文件里面通过设置struts.multipart.saveDir来改变默认路径;

好的,文件上传的内容基本这么多了,注意与文件下载的不同之处,对比学习就可以,总体而言都比较的简洁;

Struts2之文件上传相关推荐

  1. struts2的文件上传和文件下载

    实现使用Struts2文件上传和文件下载: 注意点: (1)对应表单的file1和私有成员变量的名称必须一致 <input type="file" name="fi ...

  2. Struts2之文件上传(单文件/多文件)

    <一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...

  3. Struts2的文件上传

    基于Struts2的文件上传 struts2文件上传 转载于:https://www.cnblogs.com/passer1991/archive/2012/11/15/2771135.html

  4. java文件上传过滤,struts2中文件上传过滤

    手动实现文件过滤 大部分时候,Web应用不允许浏览者自由上传,尤其不能允许上传可执行性文件--因为可能是病毒程序.通常,我们可以允许浏览者上传图片,上传压缩文件等:除此之外,还必须对浏览者上传的文件大 ...

  5. Struts2实现文件上传与下载

    Struts包+源码下载地址:点击打开链接   ,打不开,复制后面 http://struts.apache.org/download.cgi#struts223  ,历史版本:http://arch ...

  6. Struts2 单个文件上传/多文件上传

    1导入struts2-blank.war所有jar包:\struts-2.3.4\apps\struts2-blank.war 单个文件上传 upload.jsp <s:form action= ...

  7. 基于Struts2的文件上传

    Struts2本身并没提供上传的组件,我们可以通过调用上传框架来实现文件的上传. 一.配置上传解析器 首先要配置项目的框架,也就是倒导入"struts2-core-2.2.1.jar&quo ...

  8. 基于struts2的文件上传下载

    1.struts.xml 1 <struts> 2 <constant name="struts.multipart.maxSize" value="2 ...

  9. 【struts2】文件上传下载—struts2实现

    struts2实现上传下载时要用到的jar包: UploadAction.java(fileupload.action) package com.rczp.action;import java.io. ...

  10. struts2+extjs文件上传完整实现(攻克了上传中的各种问题)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/shanhuhau/article/details/28617999 首先须要引入上传控件 <s ...

最新文章

  1. Fastjson 序列化,反序列化Map对象排序问题(字符串转map,map转字符串)
  2. git push 不再需要重复输入账户密码的技巧
  3. opengl如何画出一个球_少儿美术绘画教程:毛线球
  4. Linux进程通信之管道
  5. 职场十个方法 让专业气质成为你的符号!
  6. Could not find module ‘D:\codna\Library\bin\geos_c.dll‘
  7. Apache 软件基金会:顶级项目仍使用老旧软件,补丁作用被削弱
  8. RouteDebug.dll
  9. 船舶网络搭建项目案例
  10. 基于pyqt5的Demo软件开发
  11. 复化科特斯公式matlab_基于牛顿—科特斯积分的误差分析
  12. OpenSIPS脚本中的变量
  13. 沟通书籍排行榜前十名 提高沟通能力的十大书籍推荐
  14. 技术分享 | 年终总结
  15. 有关深度学习人工智能的感悟
  16. 天龙日梅兰竹菊_第三百一十五章 梅兰竹菊
  17. 地图渲染——四色定理的实现(AO+C++)
  18. 三维CAD设计软件的核心技术解析----工业软件讲坛第二次讲座
  19. 什么是堆、栈?堆和栈的区别
  20. 攻防世界 web高手进阶区 10分题 weiphp

热门文章

  1. zabbix java api
  2. 抹掉Scala的糖衣(14) -- Update Method
  3. 3-2 :eq(index)过滤选择器
  4. Cocos2d-x学习笔记(9)(CCTextFieldTTF使用输入框)
  5. 自考--网络经济与企业管理--选择易考题
  6. 端口被占用问题Error: listen EADDRINUSE 127.0.0.1:8888
  7. 语音的基本概念--译自CMU sphinx
  8. 7-58 是否完全二叉搜索树 (30 分)
  9. Toolkit.getDefaultToolkit().getScreenSize();获取显示器屏幕大小并使JFrame窗口居中显示
  10. 串口输出换行_stm32初学者必会操作----usart串口调试工具