1. 文件上传的原理
Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。
2.表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:
1) application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式。
2) multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里。
3) text/plain:这种方式主要适用于直接通过表单发送邮件的方式。
文件上传是web应用经常用到的一个知识。原理是,通过为表单元素设置enctype="multipart/form-data"属性,让表单提交的数据以二进制编码的方式提交,在接收此请求的Servlet中用二进制流来获取内容,就可以取得上传文件的内容,从而实现文件的上传。
3.拦截器实现文件过滤
Struts 2提供了一个文件上传的拦截器,通过配置该拦截器可以轻松的实现文件过滤。Struts 2中文件上传的拦截器是fielUpload,为了让该拦截器起作用,只需要在该Action中配置拦截器引用即可。
配置fielUpload拦截器,可以为其指定两个参数:
allowedTypes:该参数指定允许上传的文件类型,多个文件类型之间以英文逗号隔开
maximumSize:该参数指定允许上传的文件大小,单位是字节。但是有一点要注意Struts2默认文件上传最大为2M,即便你设置了
<param name="maximumSize">5242880</param>
当上传的文件大于2M时候也会出错的。这时要设置另外一个常量并且要让他的value设置的比你限定上传最大值要大一点。
<constant name="struts.multipart.maxSize" value="1000000000"/>
<package name="uploadAction" extends="struts-default"> <action name="upload" class="com.app.action.UploadAction"> <!-- 配置fileUpload的拦截器 --> <interceptor-ref name="fileUpload"> <!-- 配置允许上传的文件类型 --> <param name="allowedTypes">image/png,image/gif,image/jpeg</param> <!-- 配置允许上传的文件大小 --> <param name="maximumSize">2000</param> </interceptor-ref> <!-- 配置系统默认的拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 动态设置Action的属性值(图片上传的路径) --> <param name="savePath">/upload</param> <result name="input">/upload.jsp</result> <result name="success">/success.jsp</result> </action> </package>
4.实现下载的配置
<action name="download" class="com.action.DownloadAction" > <result name="success" type="stream"> <!--指定文件下载类型 application/octet-stream默认值可以下载所有类型 --> <param name="contentType"> application/txt; </param> <!-- 指定下载的文件名和显示方式 ,但注意中文名的乱码问题,解决办法是:进行编码处理--> <!--contentDisposition是文件下载的处理方式,包括内联(inline)和附件(attachment),默认是inline, 使用附件时这样配置:attachment;filename="文件名" 。--> <!--由getFileName()方法获得文件名--> <param name="contentDisposition"> attachment;filename="${fileName}" </param> <!--由getDownloadFile()方法获得inputStream--> <param name="inputName">downloadFile</param> <!-- 指定下载文件的缓存大小--> <param name="bufferSize">2048</param> </result> </action>
这个action特殊的地方在于result的类型是一个流(stream ),配置stream类型的结果时,因为无需指定实际的显示的物理资源,所以无需指定location 属性,只需要指定inputName 属性,该属性指向被下载文件的来源,对应着Action类中的某个属性,类型为InputStream。下面则列出了和下载有关的一些参数列表:
参数说明
contentType
内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片
inputName
下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取值为inputStream 的属性需要编写getInputStream()方法
contentDisposition
文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。取值为:attachment;filename="struts2.txt" ,表示文件下载的时候保存的名字应为struts2.txt 。如果直接写filename="struts2.txt" ,那么默认情况是代表inline ,浏览器会尝试自动打开它,等价于这样的写法:inline; filename="struts2.txt"。在很多的时候我们一般都不是把文件名写死在xml配置当中的,我们一般会在action中定义一个变量filename,储存这个文件名。
bufferSize
下载缓冲区的大小
在这里面,contentType 属性和contentDisposition 分别对应着HTTP响应中的头Content-Type 和Content-disposition 头
5.Struts2针对表单中名为xxx的文件域,在对应的Action类中使用3个属性来封装该文件域信息:
类型为File的xxx属性:用来封装页面文件域对应的文件内容。
类型为String的xxxFileName属性:用来封装该文件域对应的文件的文件名。
类型为String的xxxContentType属性:用来封装该文件域应用的文件的文件类型。
相关推荐
在Struts2框架中实现文件上传和下载功能,是Web开发中常见的需求。Struts2作为一个成熟的MVC框架,提供了简单的API和标记库来处理文件上传下载的业务逻辑。下面是基于给定文件内容的知识点详细说明。 ### Struts2...
4. **进度条显示**:对于大文件上传,可以考虑使用Ajax或WebSockets实现上传进度条,提高用户体验。 在提供的压缩包`struts2_4`中,可能包含了多个示例项目,每个项目都展示了不同的文件上传实现方式或特定的处理...
Struts2是一个强大的MVC(Model-View-Controller)框架,...通过以上知识点,开发者可以在Struts2框架下实现完整的文件上传和下载功能。注意在实际应用中结合项目需求进行适当的调整和优化,确保系统的安全性和稳定性。
在本项目中,我们关注的是如何利用Struts2实现文件的上传和下载功能,以及如何进行批量上传和控制下载。以下是关于这些知识点的详细说明。 首先,`上传`在Web开发中是一个常见的需求,允许用户将本地文件发送到...
### Struts2实现文件下载:深入解析与代码实践 #### 引言 在Web应用开发中,文件的上传与下载是常见的功能需求。Struts2框架提供了强大的支持,使得开发者能够轻松实现这些功能。本文将重点介绍Struts2中文件下载...
struts2 +jquey uploadify3 2 实现多文件上传 可以运行的myeclipse工程 绝对好用 访问方式http: 127 0 0 1:8080 Struts2Uploadify upload jsp uploadify 使用说明: <a href "javascript:$ "#file ...
struts2文件上传原理分析文档。使用Commons_fileupload的框架实现上传。
在“Struts-文件上传下载.rar”这个压缩包中,我们可能会找到实现Struts文件上传下载功能的相关代码和配置文件。首先,`ps说明.txt`可能是对如何实现这一功能的简要说明,它可能包含了关键步骤、注意事项以及可能...
本篇文章将深入探讨如何在Struts2框架下实现多文件上传,并基于提供的"Struts2_10"压缩包文件进行详细说明。 首先,我们需要确保Struts2的核心库已经添加到项目的类路径中,通常这通过Maven或Gradle等构建工具来...
提供的压缩文件`struts实现上传下载源码及文档`应该包含了完整的实现示例,包括Action类、ActionForm、JSP页面以及使用说明。通过阅读源码和文档,你可以更深入地理解如何在实际项目中应用这些技术。 总之,解决...
描述中的"struts的jar包,里面包括struts2的各种jar包"说明这个压缩包包含了一系列的JAR文件,这些都是Struts2框架运行所必需的。这些JAR文件可能包括: 1. `struts2-core.jar`:这是Struts2框架的核心库,包含了...
正确的Struts2上传下载,绝对能够实现,包括有单文档上传,多文档上传以及动态文档下载功能(说明:文档上传不需要修改任何代码,只是下载时需要在Graduate里面的download界面修改要下载什么文档,并且保证盘里面有那个文档...
Extjs+struts实现文件上传 使用说明中的UploadfileAction.java中的代码要拷贝到一个JSP文件中并将url: '/rsgl/uploadfile.do',改为url: '/rsgl/jspcos.jsp',才可以正常上传
在Struts中实现文件上传是一个常见的需求,这通常涉及到用户通过表单提交包含文件的数据到服务器。以下是对文件上传和DispatchAction使用的一些详细说明: 1. **文件上传流程**: - **表单提交方式**:文件上传...
以下是Struts2配置文件的一些核心元素和属性的详细说明: 1. **配置文件结构**: Struts2的配置通常存储在一个名为`struts.xml`的XML文件中。这个文件遵循特定的DTD(文档类型定义),如`struts-2.0.dtd`,确保其...
样例通常包含了一些基础的功能实现,如表单验证、文件上传下载、拦截器使用等,可以帮助开发者快速上手并理解Struts2的基本用法。通过研究这些样例,开发者可以学习到如何配置Struts2、如何编写Action类、如何使用...
Struts2上传组件大大简化了文件上传的实现过程,使得开发者能更专注于业务逻辑,而不是底层的文件操作。在使用过程中,应充分了解其工作原理,合理配置和处理文件,确保应用的安全性和稳定性。通过学习和实践Struts2...
这本书可能深入探讨了Struts2的高级特性,例如动态方法调用、文件上传下载、Ajax支持、Tiles框架集成等。它可能还会讲解如何调试Struts2应用,优化性能,以及安全问题,比如XSS和CSRF防护。 《Struts+2.pdf》: ...
Struts2是一个流行的Java web应用程序框架,用于构建和维护可扩展且易于管理的企业级应用。最新版的Struts2核心开发包提供了该框架的核心组件,旨在简化开发过程并提高效率。下面将详细介绍这些核心包以及它们在...