文件上传
基本原理
上传文件是由FileUploadInterceptor实现的,基本原理是这样的,FileUploadInterceptor会从上传的数据中解析出 上传的文件名称,文件类型和文件内容,调用Action相应的方法进行设置。
假定上传表单中File控件的名称是upload,则Action必须实现如下三个设值方法:
setUploadFile……保存上传的文件内容
setUploadFileName……保存上传的文件名称
setUploadContentType……保存上传的文件类型
拦截器支持针对上传表单同一名称的文件控件有多个的情况,也就是同时上传多个文件,此时要求上述方法的参数是一个列表或者数组,下面描述同时上传多个文件的实现步骤:
构建上传表单
下面的示例代码中,名称为upload的File控件有多个,表示要同时上传多个文件。
- <s:form></s:form>"upload" action="customer/upload.action" method="POST"
- enctype="multipart/form-data">
- <s:file></s:file>"File (1)" name="upload" />
- <s:file></s:file>"File (2)" name="upload" />
- <s:file></s:file>"FIle (3)" name="upload" />
- <s:submit> </s:submit>
-
实现Action
这里重点列举必须实现的三个设值方法,我们可以注意到,方法名称是单数形式,但是参数是一个列表。
java 代码
- public void setUploadContentType( List<string> uploadContentTypes) </string>
- {
- this.uploadContentType = uploadContentTypes;
- }
-
- public void setUploadFileName( List<string> uploadFileNames) </string>
- {
- this.uploadFileName = uploadFileNames;
- }
-
- public void setUpload( List<file> uploads) </file>
- {
- this.upload = uploads;
- }
配置拦截器
具体的配置不再赘述,需要提一下的是此拦截器支持allowTypes和maximumSize属性,支持限制文件类型及文件大小。
另外在捕获错误时,会设置几个字段错误,字段错误的消息可以在资源文件中配置,支持的三种错误类型的键值如下:
struts.messages.error.uploading……当文件不能被上传时的错误信息。
struts.messages.error.file.too.large……文件大小超限时的错误信息。
struts.messages.error.content.type.not.allowed……文件类型不允许时的错误信息。
全局配置
可以在struts.properties文件中设置上传文件保存的临时目录,最大大小等。
下载
下载是通过StreamResult类来实现,这是一个自定义结果类型,主要作用是直接向HttpServletResponse对象发送原始数据。 StreamResult假定Action会提供一个输入流的访问方法,并将这个输入流输出到响应对象中。
SteamResult还提供如下配置属性。
contentType……发送数据的MIME类型,比如text/plain
contentLength……内容长度,单位为字节,浏览器会基于此值显示进度条
contentDispostion……设置响应头Content-disposition的值,缺省为inline
bufferSize……从输入流中读取到输出流的缓存大小
inputName……action中提供输入流的属性名称,缺省为inputStream
下面是一个StreamResult的配置示例:
xml 代码
- <action name="download2" class="org.apache.struts2.showcase.filedownload.FileDownloadAction">
- <param name="inputPath">\images\struts-gif.zip</param>
- <result name="success" type="stream">
- <param name="contentType">application/zip</param>
- <param name="inputName">inputStream</param>
- <param name="contentDisposition">filename="struts-gif.zip"</param>
- <param name="bufferSize">4096</param>
- </result>
- </action>
注意:Result对象中可以通过OGNL语法访问值堆栈,这意味着可以通过Action或其他方式传递值来设置Result配置参数,比如上述配置中contentDisposition通常是动态的,这可以通过action传递。
分享到:
相关推荐
Struts2.0 文件上传与下载全解析Struts2.0 文件上传与下载全解析
01 为Struts 2.0做好准备 02 常用的Struts 2.0的标志(Tag) 03 Struts 2.0的Action讲解...09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新表单标志的使用 13 Struts 2与AJAX
struts2.0上传文件 struts2.0上传文件 struts2.0上传文件 struts2.0上传文件
我的Struts2.0文件上传原理实例 博文链接:https://zmx.iteye.com/blog/459187
Struts 2.0系列(MAX),pdf格式,全方位介绍struts2: 常用的Struts 2.0的标志(Tag)介绍 ...在Struts 2中实现文件上传 在Struts 2中实现CRUD Struts 2中的OGNL Strus 2的新表单标志的使用 Struts 2与AJAX
分析Struts2.0文件上传与下载[包括代码段]
基于Struts2.0框架的文件上传实例, 可以同入门者参考 已测试过,可运行.
该案例是基于struts2.0 来上传图片的案例,可以轻松的限制图片的类型,大小路径,如果有不明白的地方可以844818108@qq.com
Struts2.0 实现文件上传进度 原理和实现 主要是实现Struts2.0的监听器
功能强大的Struts2.0+Extjs实现的文件上传,包含文件上传进度,文件的下载,压缩,解压多文件删除等
struts2.0文件上传的一个实例,全局文件上传,请读者多多阅读
struts2.0文件上传 拦截器 验证器 struts.xml配置文档详解 本人在该实例中遇到的最大问题及解决方案: "struts2.0做文件上传关于所加载的错误包造成的问题心得" 1:commons-io-1.4.jar 做上传时,如果用的该包是1.0的...
可以用struts做相关下载及上传 是自己写的,还比较好用! 能正常运行
09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新表单标志的使用 13 Struts 2与AJAX Struts2中用Spring实现IoC.doc Struts2中的零配置与CoC(Convention over Configration...
struts2.0+spring2.5+hibernate3.0整合框架,下载导入到eclipse下即可。。启动tomcat前先修改jdbc.properties文件。由于lib文件较大,所以请自行导入相关lib包。
struts2.0图片上传,文件的配置。struts2。0的学习。io的技术。
使用struts2.0进行多文件同时上传
里面包括了文件上传的jsp页面和action中的处理代码。可以清楚的知道文件上传与下载的工作原理
是一个完整的用struts2.0实现文件上传功能的源码