一、rfc1867规范
在过去的html中,表单不能实现文件的上传,这多少限制了一些网页的功能。rfc1867规范(即html中实现基于表单的文件上传)对表单作出了扩展,增加了一个表单元素&:ltinput type=file>。 通过使用这个元素,浏览器会自动生成一个输入框和一个按钮,输入框可供用户填写本地的文件名和路径名,按钮可以让浏览器打开一个文件选择框供用户选择文件。具体的表单实现如下:
<form action=upload.jsp enctype=″multipart/form-data″ method=post>
please input your name
<input type=text name=user>
please give us the file
<input type=file name=file1>
<input type=submit value=″send file″>
</form>
特别需要指出的是,只有netscape 3和ie3.02以后的版本才支持此规范,而且我们实践下来发现文件选择按钮是浏览器自动生成的,因而按钮的文字和浏览器版本有很大的关系,如果是中文的ie,按钮的文字是“打开...”;英文的netscape则显示“browse...”;如果是opera,则只有″...″。用户没办法自己设定按钮文字,不能不说是一种遗憾。除了浏览器,网络服务器也要能支持此规范,好在现在市面上绝大部分服务器软件都没有问题,微软的iis在增加一个插件后也能很好地支持此规范。
二、组件的安装
在用户端实现文件上传后,就要用jsp来处理用户的上传请求。我们可以去www.jspsmart.com下载一个免费的组件来实现这一功能。在安装之前先确认你的jsp服务器软件支持jdk1.2.2和jsp1.1,然后只要在server的class路径中加入该组件所在的目录就可以了。
三、程序实现
1.文件上传
<%@ page language=″java″ import=″com.jspsmart.upload.″%>
<html>
<body bgcolor=″white″>
<h1>jspsmartupload </h1>
<hr>
<% int count=0 //设置变量 smartupload mysmartupload=new smartupload
mysmartupload.initialize pagecontext //初始化
mysmartupload.upload //上传 ry
count = mysmartupload.save ″/upload″ //把上传的文件保存在/upload目录下 out.println count + ″ file s uploaded.″ //显示上传了多少个文件
catch exception e out.println e.tostring %>
</body>
</html>
需要注意:调试的时候要确认上传文件所存储的目录有可写属性。
2.表单处理
由于上传文件的表单使用了 enctype=″multipart/form-data″属性,所以在jsp中处理表单传递的值的时候不能再简单地使用request.getparameter了,而应该这样来处理:
<%@ page language=″java″ import=″com.jspsmart.upload.″%>
<html>
<body bgcolor=″white″>
<h1>jspsmartupload </h1>
<hr>
<% smartupload myupload=new smartupload myupload.initialize pagecontext myupload.upload out.println ″number of files = ″ + myupload.getfiles .getcount + ″
″ out.println ″
<strong>display information about requests</strong>
″
string[ ]values = myupload.getrequest
.getparametervalues ″formtag″ //formtag为表单中元素的name,返回的值为字符数组中第一个元素。 out.print key + ″ = ″+values0
%>
</body>
</html>
3.其他api myupload.setallowedfileslist ″txt doc xls″
设定可以上传的文件的后缀名; myupload.setdeniedfileslist ″bat exe com jsp″ 设定不能上传的文件的后缀名;
myupload.setmaxfilesize 100000 设定单个文件的最大字节数;
myupload.settotalmaxfilesize 100000 设定所有上传文件的最大字节数;
myupload.uploadinfile ″/mydata.txt″ 把表单的内容全部存储到mydata.txt保存;
myupload.getfiles .getcount 获得上传的文件的个数;
myupload.getfiles .getsize 获得上传的文件的总字节数;
myupload.getfiles .getfile id .getfilename 获得指定id号文件的文件名;
myupload.getfiles .getfile id .getfilepathname 获得指定id号文件的路径名;
myupload.getfiles .getfile 0 .ismissing 返回一布尔值以确定用户是否上传了文件。
四、其他功能 jspsmartupload除了能把上传文件保存到硬盘,还能直接把文件插入到数据库,同时还能实现文件下载的功能,相信随着大家的深入研究,一定能将这一功能更好地应用到自己的实践中去。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器