Struts1.x系列教程(8):上传单个文件2011-01-10银河使者在Web程序中的上传文件的功能一般会使用<input type=file.../>标签在客户端显示输入要上传的文件名的用户接口。如果读者使用过JSP/Servlet来处理客户端上传的文件就会知道,实现这个功能并不是很容易。而在Struts中为我们提供了一种机制,可以非常方便地将客户端上传的文件保存在服务端。在Struts Html标签库中提供了一个<html:file>标签,可以和FormFile类型的属性一起使用。通过这个属性返回的FormFile对象,就可以很方便地获得上传文件的InputStream对象,并做进一步地处理。在Struts中,一个FormFile对象代表一个上传的文件。FormFile实际上是一个接口,我们可以在org.apache.struts.upload包中找到这个接口。FormFile接口有如下五个常用的方法:1.getInputStream()方法这个方法用于获得上传文件的java.io.InputStream对象,我们可以从这个InputStream对象中读取上传文件的数据,并将其写到服务端指定的路径下。2.getFileData()方法这个方法用于将上传文件的整个内容放到一个byte类型的数组中,如果上传文件的尺寸比较小的话,使用这个方法可以很方便地将上传文件保存到在服务端的指定路径中。3.getFileName()方法这个方法用于获得上传文件的文件名(不包括文件在客户机的路径部分)。4. getFileSize()方法这个方法用于获得上传文件的字节数。5. destroy()方法用于销毁所有和当前上传文件相关的资源。下面的例子演示了如何使用<html:file>标签和FormFile对象来上传单个文件。实现这个例子需要如下六步:【第1步】建立上传文件的JSP页面在<samples工程目录>目录中建立一个uploadFile.jsp文件,代码如下:
<%@ page pageEncoding="GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
<head>
<title>上传单个文件(文件大小不能超过2M) </title>
</head>
<body>
<%-- 在<html:form>标签中必须加enctype="multipart/form-data"--%>
<html:form enctype="multipart/form-data" action="uploadFile">
<html:file property="myFile"/><p><%-- 使用<html:file>标签让用户输入上传文件名--%>
<html:submit value="上传"/>
</html:form>
</body>
</html>