在学习ASP.NET控件的时候,我们学习过关于文件上传的控件,今天我主要介绍的是关于java中的文件上传.大家都知道HTML表单中有file标签用于在客户端向服务器上传文件,但是接收客户端上传文件的服务器端程序代码需要使用java来编写.这一部分的代码特别的复杂,这个时候我们就可以使用第三方控件--jspSmartUpload组件来实现.
一.jspSmartUpload组件简介
jspSmartUpload是一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。该组件有以下几个特点:
1、使用简单。在JSP文件中仅仅书写三五行java代码就可以搞定文件的上传或下载,方便。
2、能全程控制上传。利用jspSmartUpload组件提供的对象及其操作方法,可以获得全部上传文件的信息(包括文件名,大小,类型,扩展名,文件数据等),方便存取。
3、能对上传的文件在大小、类型等方面做出限制。
二.jspSmartUpload组件相关类
1.File类
这个类包祖昂了一些上传文件的所有信息,通过它可以得到上传文件的文件名,文件大小,扩展名及文件数据信息
2.files类
files类表示所有上传文件的集合,通过它可以得到上传文件的数目,大小等信息.
3.request类
Request类的功能等同于JSP内置对象的request,它的作用就是获取上传文件项的值
4.SmartUpload类
此类主要是完成上传和下载的相关工作.
三上传文件例子
步骤一.建立文件夹
为了存放上传的文件,需要事先在服务器中创建一个文件夹来存放,此文件夹的name要与sava()方法的第一个参数的名字相同.具体的操作如下;
需要注意的是,如果不提前在web应用的目录中创建了upload文件夹,就会上传失败的,文件夹可以建立在两个目录下:
目录一,将存放上传文件的文件夹放置于web应用的"WEB-INF"文件夹中,因为这个文件夹是在客户端不能访问的.
目录二是在服务器中另建立一个文件夹,专门用来存放上传的文件,但是这样有损web应用的可移植性.
步骤二.引用jspSmartUpload.jar包
把jspSmartUpload.jar包添加到"WEB-INF"中的lib文件夹下面,因为jspSmartUpload.jar包属于第三空间包,所以存放在"WEB-INF"中的lib文件夹,如果是环境变量所引用的包,就存放在"java Resources"下的libraries下面.
步骤三代码
上传页面代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传文件</title>
</head>
<body>
<form method="post" action="uploadFileAccept.jsp" name="book" enctype="multipart/form-data">
<table cellspacing="0" cellpadding="3" border="1" width="474">
<tr>
<td align="center" colspan="2" >录入书籍信息</td>
</tr>
<tr>
<td width="150">书名:</td>
<td width="324"><input type="text" name="bookname"></td>
</tr>
<tr>
<td>封面:</td>
<td><input type="file" name="photofile"></td>
</tr>
<tr>
<td>作者:</td>
<td><input type="text" name="autor"></td>
</tr>
<tr>
<td>出版社:</td>
<td><input type="text" name="publisher"></td>
</tr>
<tr>
<td colspan="2" width="474"><input type="Submit" value="提交" ></td>
</tr>
</table>
</form>
</body>
</html>
接收页面代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="com.jspsmart.upload.SmartUpload"%>
<%@page import="com.jspsmart.upload.File"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传文件</title>
</head>
<body>
<%
//新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
//初始化
su.initialize(pageContext); //内置对象pageContext作为参数
//设定允许上传的文件
String allowed="jpg,bmp,png";
su.setAllowedFilesList(allowed); //设置允许上传的扩展名
String unallowed="bat";
su.setDeniedFilesList(unallowed); //不允许上传
su.setMaxFileSize(1024*1024*2); //最大上传2M
su.upload(); //上传到内存
su.save("upload",SmartUpload.SAVE_VIRTUAL); //文件另存到tomcat部署的项目文件夹中,不是当前项目物理位置
%>
<table cellspacing="0" cellpadding="3" border="1" width="474">
<tr>
<td width="150">书名:</td>
<td width="324"><%=su.getRequest().getParameter("bookname")%></td>
</tr>
<tr>
<td>封面:</td>
<td><img src="<%="upload/"+su.getFiles().getFile(0).getFileName()%>"></td>
</tr>
<tr>
<td>作者:</td>
<td><%=su.getRequest().getParameter("autor")%></td>
</tr>
<tr>
<td>出版社:</td>
<td><%=su.getRequest().getParameter("publisher")%></td>
</tr>
</table>
</body>
</html>
步骤四:效果图
上传页面
接收页面
四.总结
从上面的程序我们可以看出,仅用了9行代码就实现了上传文件的功能.使用第三方的控件就可以简单的解决了代码麻烦的问题.
五,扩展
有时候,也可能需要在一个表单中上传多个文件,比如QQ空间发表说说,一下需要上传多张的图片,那么这个时候怎么处理呢.我只提供一个思路,大家可以自己想想实现,具体的思路:通过SmartUpload类的getFiles().getFile(0).getFileName()方法可获得上传文件的名,其中getFile()方法的索引值是从0开始,即表单中的第1个文件框对应的索引号为0,第2个索引值是1,一次类推.可以用循环来实现.