首页 > 范文大全 > 正文

基于Struts 2框架的文件上传下载功能的设计与实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于Struts 2框架的文件上传下载功能的设计与实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:针对上传下载功能在办公系统,管理系统等应用系统中的广泛性,基于struts 2框架,对文件上传下载功能进行设计,给出相应的设计方案,并在办公系统中加以实现和验证,使得客户能够将本地文件上传到服务器端并对其进行下载。

关键字:Struts 2框架; 上传; 下载

【分类号】:TP311.10

1 引言

随着信息技术的发展,基于B/S(浏览器/服务器)架构的web系统的应用越来越广泛,而文件的上传和下载的功能是这些系统中常用的功能模块之一。例如,在办公系统中的收发邮件的功能模块,有进行收发附件的操作;在管理信息系统中,有存储和显示注册人员的照片等功能。本文将基于Struts 2的开发框架,通过使用Struts提供的Commons FileUpload,将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中,从而实现以本地文件方式的操作浏览器上传的文件和下载本地的文件。

2 文件上传功能的设计实现

上传文件首先是将文件上传到服务器,有两种方式实现。第一种是将上载的内容以文件的形式存储到服务器的硬盘;第二种是将文件直接上传到数据库服务器的数据库中。本文采取第一种文件上传的实现方式。

在上传功能的设计过程中,需要对前后台页面进行相应的设置和编码,通过前后台的相互交互和配合,达到上传的目的。

2.1 创建文件上传页面

在前台页面中,规定了上传文件所使用的HTML表单的格式。

from表单中的enctype属性的设置,确保匿名文件上传的正确编码。Struts标签中的标志将文件上传控件绑定到Action的upload属性。

2.2 创建后台代码模块

2.2.1 创建后台代码

后台程序应与前台程序相互对应,后台程序代码主要从JavaBean和Action两个方面创建,从而共同实现文件的上传功能。在上传方法中,设置两个File类的参数src,target,分别代表上传的源文件和目标文件。引入java包中的java.io.BufferedInputStream和java,io.BufferedOutputStream两个包,将源文件和目标文件以输入输出流的形式创建,并保存到指定的缓冲区中(缓冲区的大小可自行定义)进行读写操作。在文件上传时,先将源文件以输入流的形式进行读操作,保存到缓冲区中,再以输出流的形式将缓冲区的内容进行写操作,成为目标文件,从而实现了从源文件到目标文件的上传。

这里定义缓冲区的大小为16*1024,也就是16个字节,同时通过byte[] buffer=new byte[buffer_size];这行代码,定义了一个长度为16的定长字节数组buffer,用以读写的操作。

2.3.2 调用上传方法

创建好上传方法之后,对其进行调用。首先,为上传的文件设置大小,如果超过9M,则提示上传失败,由后台将失败的提示信息传到前台页面中。如果文件小于9M,将源文件上传到指定的路径中去。

由File file=new File(dir+"/upLoad/"+uploadFileName);这行代码可以看出,这里将源文件上传到指定的文件夹名为upload的路径下,便于查询。

2.4 对上传的Action文件进行配置

上传功能的Action代码创建完之后,要将其在struts.xml里面进行相应的配置。在设置文件大小时,struts.multipart.maxSize掌控整个项目所上传文件的最大的内存,超过这个内存,后台会报错。因此fileUpload拦截器的maxmumSize属性必须小于struts.multipart.maxSize的值,而struts.multipart.maxSize默认大小是2M,所以对于struts.multipart.maxSize可以采用如下配置方法:

在struts.xml中,对fileUpLoad的action请求的配置代码如下:

/mailWrite.action

/mailWrite.action

/mailWrite.action

这里需要注意,拦截器的设置应当指明为struts自带的默认拦截器,若采用自定义的拦截器,会影响上传功能。

3 文件下载功能的设计实现

文件上传功能实现以后,对文件进行下载。文件下载的原理就是将上传的文件从服务器的指定路径以输入流(InputStream)的形式读取出来,引用了java包中的java.io.FileInputStream,下载功能的实现方法和步骤与上传功能略有不同,重点在于对struts.xml文件的配置。

3.1 配置web.xml文件

Web.xml文件主要是负责整个项目的部署,包括struts 2自带的过滤器和spring监听器部署,欢迎页面的部署,session会话时间的设置等。在此项目中,session的会话时间设置为30分钟,在标签中配置;采用struts 2自带的过滤器,在标签中进行配置;而spring监听器的部署则是在标签中进行配置。

3.2 配置struts.xml文件

当result的type属性为stream类型时,struts 2会自动根据配置好的参数下载文件,其中主要使用的参数有:

contentType 指定下载文件的文件类型 ―― application/octet-stream 表示无限制。

inputName 流对象名 ―― 比如这里写downloadFile,它就会自动去找Action中的getInputStream方法。

contentDisposition 使用经过转码的文件名作为下载文件名 ―― 默认格式是attachment;filename="${fileName}",将调用该Action中的getFileName方法。

bufferSize 下载文件的缓冲大小。

3.3 创建后台Action的代码模块

结合struts.xml中文件下载功能模块的配置,创建Action,用于实现文件的下载功能,命名为DownLoadAction.java,由于struts.xml的配置文件中,设置参数inputName流对象名为getDownloadFile,因此在Action的代码模块中定义的方法名即为getDownloadFile方法。下载方法中主要有两个步骤:一是将文件从服务器下载到指定路径中,二是为下载好的文件命名。这里需要注意,上传和下载的编码格式必须一致,否则会出现乱码的现象。

基于struts 2框架,可以实现文件的上传和下载功能,通过使用标签,将其与Action的属性绑定,再结合java中输入输出机制,实现了文件的上传功能;在文件下载功能模块中,着重对struts 2框架中的配置文件struts.xml进行配置,同时对文件下载的Action功能模块进行设计,实现了文件的下载功能。

3.4 小结

本文通过Struts2框架的上传下载特性,通过对前台页面的配置以及对Action功能模块的代码编写,实现了文件的上传和下载功能,并应用与自动办公化系统当中,使上传下载功能得到了实际应用。

参考文献

[1] 叶倩文.Java Web开发中的上传与下载技术[J].电脑知识与技术.2012,08(12)

[2] 汪键峰.Struts结构中的Java Web开发中实现文件上传与下载[J].计算机系统应用 2006(9)

[3] 陈亚辉,缪勇.Struts 2+Spring+Hibernate框架技术与项目实践.清华大学出版社.2012.5

[4] 孙卫琴.精通Struts:基于MVC的Java Web设计与开发.电子工业出版社.2004.11