Java Web开发中的上传与下载技术

2012-04-29 00:44:03叶倩文
电脑知识与技术 2012年12期
关键词:组件对象

叶倩文

摘要:文件的上传和下载在网络应用中非常普遍,应用各种文件上传与下载组件来实现可以简化操作、节约项目开发时间。介绍了jspSmartUpload、commons-fileUpload上传组件,Struts文件上传,Spring文件上传技术,及组件下载、输出流方式下载技术。

关键词:上传;下载;组件;类;对象

中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)12-2776-03

Upload and Download Technology in Java Web Development

YE Qian-wen

(Sanshui Technical Secondary School and Vestibule School, Foshan 528100, China)

Abstract: Upload and download files are very common in network applications. The application of a variety of file upload and download components can simplify operations, save project development time. Introduced jspSmartUpload, commons-fileUploadcomponents, Struts and the Spring file upload technology, component download, The output stream download technology.

Key words: upload; download; component; class; object

文件的上传和下载在网络应用中非常普遍,可以通过流来实现文件的上传与下载,但是这种方式较为麻烦。为了节省开发项目的时间、简化操作,可应用各种文件上传与下载组件来实现。这些组件对许多操作进行了封装,提供了各种接口和方法,在开发时只需调用这些方法,即可实现文件的上传与下载。

在众多文件上传组件中,比较流行的是jspSmartUpload与commons-fileUpload,这两种组件为文件的上传与下载提供了便利的方法。下面介绍Java Web开发中常用的上传与下载组件及技术

1 jspSmartUpload组件

jspSmartUpload是一个功能较全面的上传与下载组件,可从www.jspsmart.com网站上下载。该组件有以下特点:

1)使用简单。jspSmartUpload组件对许多方法进行了封装,在web应用中只需要书写三五行代码就能完成文件上传下载操作。

2)有过滤功能。jspSmartUpload上传组件提供了获取全部上传文件的功能,例如获取文件名、文件大小、文件类型、扩展名等,并能对文件上传的大小、类型等做出限制,过滤掉不符合要求的文件。

3)下载方法灵活。使用jspSmartUpload组件可对Web服务器中任意目录下的文件进行下载。

2 commons-fileUpload组件

commons-fileUpload上传组件是Apache的一个开源项目,需要commons-io包的支持,在Apache的官方网站上均可下载。该组件使用方便,可以实现一个或多个文件的上传,同时能限制文件大小。与jspSmartUpload组件相比,commons-fileUpload对中文支持良好。基于上述优势,加之jspSmartUpload上传组件已经停止了开发,因此建议使用commons-fileUpload上传组件。通过com mons-fileUpload实现文件上传的基本步骤如下:

2.1创建DiskFileItemFactory对象

首先要创建DiskFileItemFactory对象,用于配置上传组件ServletFileUpload。代码如下:DiskFileItemFactory factory=new DiskFileItemFactory ( );

DiskFileItemFactory类提供了众多方法对上传文件进行设置,常用方法有:

1)public void setSizeThreshold(int sizeThreshold)

参数用于设置最大内存大小。Apache文件上传组件在解析上传数据中的每个字段内容时,需要临时保存解析出的数据,以便在后面进行数据的进一步处理(保存在磁盘特定位置或插入数据库)。因为Java虚拟机默认可以使用的内存空间是有限的,超出限制时将会抛出“java.lang.OutOfMemoryError”错误。如果上传的文件很大,例如800M的文件,在内存中将无法临时保存该文件内容,Apache文件上传组件转而采用临时文件来保存这些数据;但如果上传的文件很小,例如600个字节的文件,显然将其直接保存在内存中性能会更加好些。

2)public void setRepositoryPath (String repositoryPath)

参数用于设置临时目录,setRepositoryPath方法用于设置当上传文件尺寸大于setSizeThreshold方法设置的临界值时,将文件以临时文件形式保存在磁盘上的存放目录。有一个对应的获得临时文件夹的File getRepository()方法。

3)public File getRepository( )获取保存临时文件地址。

2.2创建ServletFileUpload对象

ServletFileUpload对象即上传文件的句柄。以DiskFileItemFactory对象为参数构造ServletFileUpload对象,代码为:

ServletFileUpload upload=new ServletFileUpload(factory);

ServletFileUpload类常用方法有:

1)boolean isMultipartContent(HttpServletRequest request)判断上传表单是否为上传表单类型。

2)List parseRequest(HttpServletRequest request)对requests对象进行解析,并把表单中的每一个输入项包装成一个FileItem对象,并返回一个保存了所有FileItem的list集合。

3 Struts文件上传

应用Struts实现文件上传很简单,无需向项目中添加单独的文件上传JAR包,只需要通过Struts标签库中的<html:file>标签生成<input type=file>元素,利用其提供的功能即可实现从HTML表单上上传文件。3.1<html:file>标签

<html:file>标签与<input type=file>元素实现的功能相同,都是用于实现文件上传操作。语法格式:

在使用标签实现文件上传时,该标签必须嵌套在标签中使用,并且标签的enctype属性必须设置为multipart/form-data。例如:

3.2 ActionForm Bean编写

在于JSP页面对应的ActionForm中,需要定义与对应的属性,该属性类型为org.apache.stuts.upload.FormFile,名称与< html:file>标签中的property属性值相同。例如:

public class MyActionForm extends ActionForm{

private FormFile file;

public FormFile getFile( ){

return file;

}

public void setFile(FormFile file){ this.file=file;

}}

3.3实现文件上传

Struts实现文件上传是在Action类中实现的。可以分别创建读取上传文件的InputStream对象,将文件数据写到目标文件中的OutputStream对象,这样就能通过流将源文件数据写入到指定的目标文件中。例程序略。

4 Spring文件上传

Spring是简洁、高效的J2EE开发框架,其文件上传功能是通过Struts提供的Commons-fileUpload组件来实现。使用Spring实现文件上传功能,首先需要在DispatcherServlet上下文中添加分段文件解析器。这样,每个请求就会被检查是否包含上传文件,如果有,则应用上下文中已经定义的MultipartResolver就会被调用。

4.1配置文件上传解析器

在使用Spring实现文件上传时,首先需要配置文件上下文解析器。Spring的DispatcherServletResolver类用于解析上传的文件数据,该类位于org.springframework.web.multipart.commons包中。例如,在Spring配置文件dispatcher-servlet.xml中配置文件上传解析器,代码如下:

class=”org.springframework.web.multipart.commons. CommonsMultipartResolver”>

< property name=”defaultEncoding”value=”gbk”/>//设置编码格式

< property name=”maxUploadSize”value=”50000”/>//限制上传文件大小

< property name=”UploadTempDir”value=”upload/temp”/> //设置临时文件夹

4.2编写文件上传表单界面

Spring实现文件上传时,表单元素的编码类型同样必须设置为multipart/form-data。可以通过Spring框架的form表单标签库定义表单,在表单中定义文件上传file控件。

成功创建上传文件页面后,可以创建与页面对应的表单类,用于保存页面表单的所有数据。在表单类中上传文件对应的属性类型为MultipartFile,该属性类型与Struts中的FormFile类型相同,封装了上传文件的内容、文件名等信息。

4.3编写文件上传控制器

文件上传控制器继承自SimpleFormController,用于处理页面请求。在该类的构造方法中必须调用setCommandClass()方法设置表单控制器的表单对象类型。在重写父类的onSubmit()方法中,实现处理文件上传的业务。该方法从表单对象中读取用户上传的表单数据,再把上传的文件保存到指定文件夹中,最后返回显示上传成功的视图对象。此外,还需要在Spring配置文件dispatch er-servlet.xml中对其进行配置。

5.文件下载

文件下载服务在很多网站都有,提高了网站的访问量。常用的文件下载技术有组件下载和输出流方式下载。

5.1组件下载

jspSmartUpload组件主要用于实现文件的上传与下载操作。该类的常用方法有:

initialize()方法

该方法有三种重载形式,主要用于实现初始化功能,语法格式略。

upload()方法

该方法用于完成上传文件的准备操作。该方法必须首先调用request对象的getInputStream()方法获取客户端的输入流,之后再通过输入流的read()方法获取用户上传的所有文件数据,并提取出的文件信息封装到File类对象中,最后将File类对象通过File类的addFile()方法添加到File对象中。

downloadFile()方法

该方法实现文件下载功能,该方法有3种重载形式,其语法格式略。

setContentDisposition()方法

该方法用于将数据追加到MIME文件头的CONTENT-DISPOSITION域,将该参数设为null时,组件将自动添加attachment,表示将下载的文件作为附件,浏览器将弹出”文件下载”对话框。

5.2输出流方式下载

通过I/O技术实现文件下载,步骤如下:

获取上传文件的路径,根据该路径创建File对象

String path=request.getParameter(“path”);

path=new String(path.getBytes(“iso-8859-1”));

File file=new File (path);

创建文件字节输入流对象

InputStream in=new FileInputStream (file);

创建输出流对象

OutputStream os=response.getOutputStream ();

循环读取文件

while ((data=in.read ())! =-1)

{os.write (data);}

向指定目录写文件

关闭流

in. close (); out. close ();

例程序源代码因篇幅限制略去。

6结束语

该文介绍了Java Web开发中的jspSmartUpload、commons-fileUpload上传组件,Struts文件上传,String文件上传技术,及组件下载、输出流方式下载技术。由于篇幅所限未给出源程序代码。

参考文献:

[1]王国辉.Java Web开发实战宝典[M].北京:清华大学出版社,2010:650-710.

[2]王黎,于永军,张豪,等.动态网站开发典型案例[M].北京:清华大学出版社,2010:257-285.

[3] MyEclipse.JSP.文件上传下载[EB/OL].http://wenku.baidu.com/view/557b74225901020207409cbc.html.

猜你喜欢
组件对象
神秘来电
睿士(2023年2期)2023-03-02 02:01:09
无人机智能巡检在光伏电站组件诊断中的应用
能源工程(2022年2期)2022-05-23 13:51:50
涉税刑事诉讼中的举证责任——以纳税人举证责任为考察对象
新型碎边剪刀盘组件
重型机械(2020年2期)2020-07-24 08:16:16
U盾外壳组件注塑模具设计
攻略对象的心思好难猜
意林(2018年3期)2018-03-02 15:17:24
桥梁组件搭配分析
中国公路(2017年16期)2017-10-14 01:04:56
基于熵的快速扫描法的FNEA初始对象的生成方法
区间对象族的可镇定性分析
风起新一代光伏组件膜层:SSG纳米自清洁膜层
太阳能(2015年11期)2015-04-10 12:53:04