SmartUpload组件+Servlet+Jsp实现文件的上传和下载

SmartUploadServlet.java

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.jspsmart.upload.*;;
public class SmartUploadServlet extends HttpServlet {
private ServletConfig config;
//初始化Servlet
final public void init(ServletConfig config)
throws ServletException{
this.config=config;
}
//处理GET请求
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

this.doPost(request, response);
}
//响应POST请求
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取PrintWriter对象
PrintWriter out = response.getWriter();
out.println(
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println(
"<HTML>");
out.println(
"<HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(
"<BODY bgcolor='white'><center><br>");
out.println(
"<br><h1>jspSmartUpload</h1>");
out.println(
"<hr><br>");
//新建一个SmartUpload对象
SmartUpload mySmartUpload=new SmartUpload();
try{
//上传初始化
mySmartUpload.initialize(config, request, response);
//设定每个上传文件的最大长度
mySmartUpload.setMaxFileSize(1*512*1024);
//设定总上传数据的长度
mySmartUpload.setTotalMaxFileSize(1*1024*1024);
//设定允许上传的文件的类型,只允许上传java,doc,txt文件
mySmartUpload.setAllowedFilesList("java,doc,txt");
//设定禁止上传的文件的类型,禁止上传带有exe,bat文件
mySmartUpload.setDeniedFilesList("exe,bat");
//上传文件
mySmartUpload.upload();
//将上传文件全部保存到指定目录
int count=mySmartUpload.save("/");
out.println(
//利用Request对象获取参数之值
mySmartUpload.getRequest().getParameter("paramete")+"&nbsp;");
//显示处理结果
out.println("<font color=red>"+count+"</font>&nbsp;File Upload!<br>");
//处理每个上传文件
for(int i=0;i<mySmartUpload.getFiles().getCount();i++)
{
com.jspsmart.upload.File file
=mySmartUpload.getFiles().getFile(i);
//判断用户是否选择了文件
if(!file.isMissing()){
//打印文件名
out.println("File Name:&nbsp;<font color=red>"
+file.getFileName()+"</font><br>");
//打印文件扩展名
out.println("File ExtName:&nbsp;<font color=red>"
+file.getFileExt()+"</font><br>");
//打印文件路径,包括目录
out.println("Path:&nbsp;<font color=red>"
+file.getFilePathName()+"</font><br>");
//另存到以Web应用程序的根目录为文件根目录的目录下
//(声明一下:在Myeclipse中,该目录位于工程下的.metadata/.me_tcat/webapps/该工程目录/upload/)
file.saveAs("/upload/"+file.getFileName(),mySmartUpload.SAVE_VIRTUAL);
//另存到操作系统的根目录为文件根目录的目录下
file.saveAs("F:\\my tool\\project\\SmartUpload\\temp\\"+file.getFileName(),
mySmartUpload.SAVE_PHYSICAL);
}
}
}
catch(Exception e){//异常处理
//打印自定义异常信息
out.println("Unanable to upload the file.<br>");
out.println(
"Please Check The File Type");
}
out.println(
"</center></BODY>");
out.println(
"</HTML>");
}
}

  upload.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>jspSmartUpload组件文件上传</title>
</head>
<body>
<br><br><center>
<font size="5" color="#ff0000"><b>jspSmartUpload组件文件上传</b></font><br>
<form name="uploadForm" enctype="multipart/form-data"
method
="post" action="servlet/SmartUploadServlet">
<table border="0" align="center" cellpadding="2" cellspacing="2" bgcolor="snow">
<input type="hidden" name="paramete" value="OK!">
<tr>
<td>
<div align="center">上传文件1:</div>
</td>
<td><div align="center">
<input type="file" name="file1" size="25" maxlength="80">
</div></td>
</tr>
<tr>
<td>
<div align="center">上传文件2:</div>
</td>
<td><div align="center">
<input type="file" name="file2" size="25" maxlength="80">
</div></td>
</tr>
<tr width="100%">
<td>
<div align="center"><input type="submit" value="上传文件">
<input type="reset" value="清除"></div>
</td>
</tr>
</table>
</form></center>
</body>
</html>

  SmartDownloadServlet.java

    

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.jspsmart.upload.*;;
public class SmartDownloadServlet extends HttpServlet {
private ServletConfig config;
//初始化Servlet
final public void init(ServletConfig config)
throws ServletException{
this.config=config;
}
//处理GET请求
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
//响应POST请求
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取PrintWriter对象
//PrintWriter out = response.getWriter(); //这里会出现异常
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("<HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println("<BODY bgcolor='white'><center><br>");
out.println("<br><h1>jspSmartDownload</h1>");
out.println("<hr><br>");
//新建一个SmartUpload对象
SmartUpload mySmartUpload=new SmartUpload();
try{
//上传初始化
mySmartUpload.initialize(config, request, response);
String fileName=request.getParameter("fileName");
//设定contentDisposition为null以禁止浏览器
//自动打开文件
//保证单击链接后是下载文件,若不设定,则
mySmartUpload.setContentDisposition(null);
//下载文件
mySmartUpload.downloadFile("/upload/"+fileName);
}catch(Exception e){//异常处理
//打印自定义异常信息
//out.println("Download Fail.<br>");
//out.println(e.toString());
//想要打印信息可参考下面的补充说明
}
//out.println("</center></BODY>");
//out.println("</HTML>");
}
}

  download.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>jspSmartUpload组件下载文件</title>
</head>
<body>
<br><br><center>
<font size="5" color="#ff0000"><b>jspSmartUpload组件下载文件</b></font><br>
<form name="uploadForm" enctype="multipart/form-data"
method
="post" action="servlet/SmartDownloadServlet">
<table border="0" align="center" cellpadding="2" cellspacing="2" bgcolor="snow">
<tr>
<td>
<div align="center">
<a href="servlet/SmartDownloadServlet?fileName=1.jpg">文件1</a>
</div>
</td>
<td>
<div align="center">
<a href="servlet/SmartDownloadServlet?fileName=2.jpg">文件2</a>
</div>
</td>
</tr>
</table>
</form></center>
</body>
</html>

 

对 jspSmartUpload上传下载全攻略 的一点补充和说明!!

如果要在servlet中使用jspSmartUpload.则须改为
 // 上传初始化
    su.initialize(getServletConfig(),request,response);


截取同表单一起传过来的表单元素.并使其成中文.
operStr =new String(su.getRequest().getParameter("act").getBytes("GBK"),"gb2312");

下载出错:getWriter() has already been called  的解决方法
1.必须用SERVLET下载.
2.//    PrintWriter out = response.getWriter();令这一行失效.
分析:个人认为,因为在组件中,已经打开过一次response.getWriter了.所以再次打开
          时会出现调用重复的现象.于是出错!!!

解决方法:如果要在页面打印出错信息,可将PrintWriter out = response.getWriter();设

                  成局部变量.例:.....catch(...){PrintWriter out = response.getWriter();}如果不用,则可以不设. 





原文地址:https://www.cnblogs.com/macula/p/2143985.html