用jspSmartUpload组件实现文件上传、下载

jspSmartUpload组件,可从http://download.csdn.net/user/dearchuansir下载,压缩包的名字是jspSmartUpload.zip。下载后,将其解压到Tomcat的webapps目录下。解压后,将webapps/jspsmartupload目录下的子目录Web-inf名字改为全大写的WEB-INF,这样一改jspSmartUpload类才能使用。如果想让Tomcat服务器的所有Web应用程序都能用它,必须做如下工作:
1.进入命令行状态,将目录切换到Tomcat的webapps/jspsmartupload/WEB-INF目录下。
2.运行JAR打包命令:jar cvf jspSmartUpload.jar com,也可以打开资源管理器,切换到当前目录,用WinZip将com目录下的所有文件压缩成jspSmartUpload.zip,然后将jspSmartUpload.zip换名为jspSmartUpload.jar文件即可。
3.将jspSmartUpload.jar拷贝到Tomcat的shared/lib目录下。
 
上传相关代码
 
uploadFile.jsp
 
<%@ page contentType="text/html;charset=GB2312"%> <form method="post" action="doUpload.jsp" enctype="multipart/form-data"> <table width="315" border="0">   <tr>     <td width="309" align="center"><input type="file" name="file1" size="30"></td>   </tr>   <tr>     <td align="center"><input type="file" name="file2" size="30"></td>    <tr>     <td align="center"><input type="submit" name="Submit" value="上传"></td>   </tr> </table> </form>
 
doUpload.jsp
 
<%@ page contentType="text/html; charset=gbk" import="java.util.*,com.jspsmart.upload.*"%> <html> <head> <title>文件上传处理页面</title> <meta http-equiv="Content-Type" content="text/html; charset=gbk"> </head> <body> <% // 新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 上传初始化 su.initialize(pageContext); // 设定上传限制 // 1.限制每个上传文件的最大长度。 // su.setMaxFileSize(10000); // 2.限制总上传数据的长度。 // su.setTotalMaxFileSize(20000); // 3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。 // su.setAllowedFilesList("doc,txt"); // 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,jsp,htm,html扩展名的文件和没有
//扩展名的文件。 // su.setDeniedFilesList("exe,bat,jsp,htm,html,,"); // 上传文件 su.upload(); // 将上传文件全部保存到指定目录,需要先在在Web应用的根目录下,创建一个upload目录 int count = su.save("/upload"); out.println(count+"个文件上传成功!<br>"); // 利用Request对象获取参数之值 out.println("TEST="+su.getRequest().getParameter("TEST") +"<BR><BR>"); // 逐一提取上传文件信息,同时可保存文件。 for (int i=0;i<su.getFiles().getCount();i++) { com.jspsmart.upload.File file = su.getFiles().getFile(i); // 若文件不存在则继续 if (file.isMissing()) continue; // 显示当前文件信息 out.println("<TABLE BORDER=1>"); out.println("<TR><TD>表单项名(FieldName)</TD><TD>" + file.getFieldName() + "</TD></TR>"); out.println("<TR><TD>文件长度(Size)</TD><TD>" + file.getSize() + "</TD></TR>"); out.println("<TR><TD>文件名(FileName)</TD><TD>" + file.getFileName() + "</TD></TR>"); out.println("<TR><TD>文件扩展名(FileExt)</TD><TD>" + file.getFileExt() + "</TD></TR>"); out.println("<TR><TD>文件全名(FilePathName)</TD><TD>" + file.getFilePathName() + "</TD></TR>"); out.println("</TABLE><BR>"); // 将文件另存 // file.saveAs("/upload/" + myFile.getFileName()); // 另存到以WEB应用程序的根目录为文件根目录的目录下 // file.saveAs("/upload/" + myFile.getFileName(),su.SAVE_VIRTUAL); // 另存到操作系统的根目录为文件根目录的目录下 // file.saveAs("c:\\temp\\" + myFile.getFileName(),su.SAVE_PHYSICAL); } %> </body> </html>
 
下载相关代码

 

download.jsp

 

<%@page contentType="text/html;charset=gb2312"%> <html> <head> <title>下载</title> </head> <body> <a href="do_download.jsp">点击下载</a> </body> </html>  

do_download.jsp

 

<%@ page contentType="text/html;charset=gb2312" import="com.jspsmart.upload.*" %> <% // 新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 初始化 su.initialize(pageContext); // 设定contentDisposition为null以禁止浏览器自动打开文件, //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为doc时,浏览器将自动用word打开它。

//扩展名为pdf时,浏览器将用acrobat打开。 su.setContentDisposition(null); // 下载文件,保证Web应用下的upload目录下有测试文档.doc文件。 su.downloadFile("/upload/测试文档.doc"); %>

注意:jspSmartUpload编写下载文件代码时,若下载的文件名中有汉字,则浏览器在提示另存的文件名时,显示的是一堆乱码。为了给jspSmartUpload组件增加下载中文文件的支持,对返回给浏览器的另存文件名进行UTF-8编码后,浏览器便能正确显示中文名字了。在SmartUpload.java文件中,增加的方法如下:

 public static String toUtfString(String s) { StringBuffer sb = new StringBuffer(); for (int i=0;i<s.length();i++) { char c = s.charAt(i); if (c >= 0 && c <= 255) { sb.append(c);   } else
{     byte[] b;     try {          b = Character.toString(c).getBytes("utf-8");         } catch (Exception ex) {          System.out.println(ex);          b = new byte[0];           }     for (int j = 0; j < b.length; j++) {     int k = b[j];     if (k < 0) k += 256;     sb.append("%" + Integer.toHexString(k).toUpperCase());       }   } }
return sb.toString(); }
将文件名转换为UTF-8形式的编码形式。UTF-8编码对英文未作任何处理,对中文则需要转换为%XX的形式。toUtf8String方法中,直接利用Java语言提供的编码转换方法获得汉字字符的UTF-8编码,之后将其转换为%XX的形式。
修改 getFileName()方法如下,使其调用toUftString()方法
private String getFileName(String s) {   int i = 0;   String s1 = toUtfString(s);   i = s1.lastIndexOf(‘/‘);   if (i != -1) {    return s1.substring(i + 1, s1.length());   }   i = s1.lastIndexOf(‘\\‘);   if (i != -1) {    return s1.substring(i + 1, s1.length());   } else {    return s1;   }  }
完整的代码请从http://download.csdn.net/user/dearchuansir下载。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。