SmartUpload由于它的简单易用性现在仍然有很多人去使用,想要使用SmartUpload实现上传和下载功能,只需将SmartUpload.jar包复制到Tomcat安装目录下的/lib文件夹下即可。
现在首先实现简单的单个文件上传,这时必须要对表单进行封装。在form里面加上enctype=“multipart/form-data”表示表单将按照二进制的方式提交,而且是整体提交,而不再是分别提交。
上传表单的jsp文件:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<html>
<head>
<title>My JSP 'smartupload.jsp' starting page</title>
</head>
<body>
<fieldset>
<legend>文件上传操作</legend>
<form action="smartreceive.jsp" method="post" enctype="multipart/form-data">
请选择要上传的文件:<input type="file" name="pic"/>
<input type="submit" value="上传"/>
</form>
</fieldset>
</body>
</html>
下面编写接受文件的jsp页面,并选择合适的文件夹存放上传的文件。
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@page import="org.lxh.smart.SmartUpload"%>
<head>
<title>My JSP 'smartreceive.jsp' starting page</title>
</head>
<body>
<%
SmartUpload smart = new SmartUpload() ;
smart.initialize(pageContext) ; //初始化上传操作
smart.upload() ;
smart.save("uploadtest") ; //保存上传文件在根目录下的uploadtest下
%>
<h2>文件上传成功,以保存在根目录下的uploadtest文件夹下</h2>
</body>
</html>
如果要实现批量上传的话通过循环取出即可。
现在的一个有一个问题就是表单封装了以后,表单里面的一些内容就无法使用request内置对象取得。那这不是很麻烦,所以SmartUpload提供了相应的方法取得form里面的请求参数。
假如在前面文件上传的jsp文件里的表单下加入如下类容:
请输入上传的文件名:<input type="text" name="filename"><br />
即原来的代码变成了这样:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<html>
<head>
<title>My JSP 'smartupload.jsp' starting page</title>
</head>
<body>
<%
request.setCharacterEncoding("GBK") ;
%>
<fieldset>
<legend>文件上传操作</legend>
<form action="smartreceive.jsp" method="post" enctype="multipart/form-data">
请输入上传的文件名:<input type="text" name="filename"/><br/>
请选择要上传的文件:<input type="file" name="pic"/><br/>
<input type="submit" value="上传"/>
</form>
</fieldset>
</body>
</html>
那么这是如果通过在接受文件端使用request.getParameter("filename")是无法取得此属性的;
必须是用SmartUpload类中提供的getRequest()方法。此时接收的jsp文件为:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@page import="org.lxh.smart.SmartUpload"%>
<head>
<title>My JSP 'smartreceive.jsp' starting page</title>
</head>
<body>
<%
request.setCharacterEncoding("GBK") ;
%>
<%
SmartUpload smart = new SmartUpload() ;
smart.initialize(config,request,response) ; //初始化上传操作
smart.upload() ;
smart.save("upload") ; //保存上传文件在根目录下的uploadtest下
String filename = smart.getRequest().getParameter("filename") ;
%>
<h2>使用smart.getRequest()取得的文件名:<%=filename%></h2>
<h2>使用request取得的文件名:<%=request.getParameter("filename")%></h2>
<h2>文件上传成功,以保存在根目录下的uploadtest文件夹下</h2>
</body>
</html>
(注意:smart.getRequest()方法必须在上传操作完成后才可以使用,要不是 无法取得的,有时候可能无法取得,重新打开浏览器即可,要是都还不行,直接换个浏览器,我就遇到过这个问题,郁闷了一下午,结果换个浏览器就可以了)
运行下: