jspsmartupload上传下载,解决乱码
如题,这个上传下载功能用的是jspsmartupload组件,要到网上下载jar包
先上一个简单的案例程序:
上传:
前台:
<%@ page contentType="text/html;charset=UTF-8"%>
<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>
后台:
import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.jspsmart.upload.SmartUpload;
public class SmartUploadServlet extends HttpServlet {private ServletConfig config;//初始化Servletfinal 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();//将上传文件全部保存到指定目录String name = new String(mySmartUpload.getRequest().getParameter("paramete"));System.out.println(name);int count=mySmartUpload.save("/");out.println(//利用Request对象获取参数之值//String name= new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8") ; mySmartUpload.getRequest().getParameter("paramete")+" ");out.println(name);//显示处理结果out.println("<font color=red>"+count+"</font> 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: <font color=red>"+file.getFileName()+"</font><br>");//打印文件扩展名out.println("File ExtName: <font color=red>"+file.getFileExt()+"</font><br>");//打印文件路径,包括目录out.println("Path: <font color=red>"+file.getFilePathName()+"</font><br>");//另存到以Web应用程序的根目录为文件根目录的目录下//(声明一下:在Myeclipse中,该目录位于工程下的.metadata/.me_tcat/webapps/该工程目录/upload/)file.saveAs("/upload/"+file.getFileName(),mySmartUpload.SAVE_VIRTUAL);}}}catch(Exception e){//异常处理//打印自定义异常信息out.println("Unanable to upload the file.<br>");out.println("Please Check The File Type");}}
}
下载:
前台:
<%@ page contentType="text/html;charset=UTF-8"%>
<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=新建文本文档.txt">文件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>
后台:
import java.io.IOException;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.jspsmart.upload.SmartUpload;
public class SmartDownloadServlet extends HttpServlet {private ServletConfig config;//初始化Servletfinal 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 {//新建一个SmartUpload对象SmartUpload mySmartUpload=new SmartUpload();try{//上传初始化mySmartUpload.initialize(config, request, response);//String name= new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8") ; String fileName=new String(request.getParameter("fileName").getBytes("ISO-8859-1"),"utf-8");//System.out.println(fileName);//设定contentDisposition为null以禁止浏览器//自动打开文件//保证单击链接后是下载文件,若不设定,则mySmartUpload.setContentDisposition(null);//下载文件 可加路径"/upload/"mySmartUpload.downloadFile("/upload/"+fileName);}catch(Exception e){//异常处理}}
}
要注意一点,如果用了这个组件,那么上传的form表单中,要加一个属性:enctype="multipart/form-data" ;而且因为此,如果要同时传其他参数,后台接收的时候不能用以前的request.getParamter(); 而是要用这个组件里面的方法:比如你同时在input中写了文件名docName,要传这个值,后台要在mySmartUpload.upload();这句后写String docName = mySmartUpload.getRequest().getParameter("doNname"); ,注意一定要在那句话之后。
现在问题来了,这个组件确实用起来非常简单,在一些小的项目中很实用,但他也有非常让人头疼的问题——中文乱码。这个问题也没有什么好的解决办法,因为jspsmartupload这个组件本来就不支持中文,唯一的一个解决办法就是改他的源码。你可以尝试上网找办法自己改一下,很麻烦的。现笔者已将此问题解决。完美支持jspsmartupload中文上传下载及传参的jar包如下:
http://download.csdn.net/detail/u011250851/7200253 希望能给你帮助。