在学习ASP.NET控件的时候,我们学习过关于文件上传的控件,今天我主要介绍的是关于java中的文件上传.大家都知道HTML表单中有file标签用于在客户端向服务器上传文件,但是接收客户端上传文件的服务器端程序代码需要使用java来编写.这一部分的代码特别的复杂,这个时候我们就可以使用第三方控件--jspSmartUpload组件来实现.
jspSmartUpload是一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。该组件有以下几个特点:
1、使用简单。在JSP文件中仅仅书写三五行java代码就可以搞定文件的上传或下载,方便。
2、能全程控制上传。利用jspSmartUpload组件提供的对象及其操作方法,可以获得全部上传文件的信息(包括文件名,大小,类型,扩展名,文件数据等),方便存取。
3、能对上传的文件在大小、类型等方面做出限制。
这个类包祖昂了一些上传文件的所有信息,通过它可以得到上传文件的文件名,文件大小,扩展名及文件数据信息
files类表示所有上传文件的集合,通过它可以得到上传文件的数目,大小等信息.
Request类的功能等同于JSP内置对象的request,它的作用就是获取上传文件项的值
此类主要是完成上传和下载的相关工作.
为了存放上传的文件,需要事先在服务器中创建一个文件夹来存放,此文件夹的name要与sava()方法的第一个参数的名字相同.具体的操作如下;
需要注意的是,如果不提前在web应用的目录中创建了upload文件夹,就会上传失败的,文件夹可以建立在两个目录下:
目录一,将存放上传文件的文件夹放置于web应用的"WEB-INF"文件夹中,因为这个文件夹是在客户端不能访问的.
目录二是在服务器中另建立一个文件夹,专门用来存放上传的文件,但是这样有损web应用的可移植性.
把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,一次类推.可以用循环来实现.