file io를 이용해서 파일 다운로드 구현하기

  1. 第一个页面:(存在“下载”按钮的页面)
  2.   
  3. function doDownload(filePath,disName) {
  4.       var utl="download.jsp?filePath="+filePath+"&disName="+disName;
  5.       document.all.opForm.action=url;
  6. //    document.all.opForm.target="_blank";
  7.       document.all.opForm.submit();
  8. }
  9. <form name="opForm" method="post" action="">
  10. <table width="10%" name="table1">
  11.    <tr>
  12.       <td>
  13. <input name=”cmdDownload”οnclick=”doDownload(‘<%=filePath%>’,’<%=fileName%>’)” value=”下载”>
  14.       </td>
  15.    </tr>
  16. </table>
  17. </form>
  18.  第二个页面(download.jsp):
  19. <%@ page import="java.io.OutputStream" %>
  20. <%@ page import="java.io.FileInputStream" %>
  21. <%
  22.     //response.reset();
  23.     //filePath为全路径:D:/upload/a.doc
  24.     String path = request.getParameter("filePath");
  25.     int k = path.lastIndexOf("/");
  26.     String name = path.substring(k + 1 , path.length());
  27.     response.setContentType("unknown");
  28.     response.addHeader("Content-Disposition","filename=/"" + name + "/"");
  29.     try {
  30.         OutputStream os = response.getOutputStream();
  31.         FileInputStream fis = new FileInputStream(path);
  32.         byte[] b = new byte[1024];
  33.         int i = 0;
  34.         while((i = fis.read(b)) > 0) {
  35.             os.write(b, 0 ,i);
  36.         }
  37.         fis.close();
  38.         os.flush();
  39.         os.close();
  40.     } catch(Exception e) {
  41.         e.printStackTrace();
  42.     }
  43. %>
  44. 如果只是这样写在tomcat底下可以正常使用,但weblogic底下会报如下错误:
  45. java.net.ProtocolException: Exceeded stated content-length of: '19456' bytes
  46.         at weblogic.servlet.internal.ServletOutputStreamImpl.checkCL(ServletOutputStreamImpl.java:219)
  47.         at weblogic.servlet.internal.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:170)
  48.         at com.jspsmart.upload.SmartUpload.downloadFile(SmartUpload.java:579)
  49.         at com.jspsmart.upload.SmartUpload.downloadFile(SmartUpload.java:508)
  50.         at jsp_servlet._page.__download._jspService(__download.java:184)
  51.         at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
  52.         at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)
  53.         at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)
  54.         at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:431)
  55.         at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
  56.         at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
  57.         at com.nstc.web.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:30)
  58.         at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
  59.         at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6297)
  60.         at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
  61.         at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:97)
  62.         at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3575)
  63.         at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2573)
  64.         at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:178)
  65.         at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:151)
  66. >
  67. 这是因为weblogic会向response中写东西造成的,解决方式是将此句response.reset();的注释打开,这样在使用response时先将其重置。
  68. 二 .利用jspsmartupload.jar实现下载
  69.   第一个页面同上
  70.   download.jsp实现如下:
  71. <%@ page contentType="text/html;charset=gb2312"%>
  72. <%@ page import="com.jspsmart.upload.*" %>
  73. <%!
  74.    public String toUtf8String(String s)
  75.    {
  76.       
  77.       StringBuffer sb = new StringBuffer();
  78.       for (int i = 0; i < s.length(); i++)
  79.       {
  80.          char c = s.charAt(i);
  81.          if (c >= 0 && c <= 255)
  82.          {
  83.             sb.append(c);
  84.          }
  85.          else
  86.          {
  87.             byte[] b;
  88.             try
  89.             {
  90.                b = Character.toString(c).getBytes("utf-8");
  91.             }
  92.             catch (Exception ex)
  93.             {
  94.                System.out.println(ex);
  95.                b = new byte[0];
  96.             }
  97.             for (int j = 0; j < b.length; j++)
  98.             {
  99.                int k = b[j];
  100.                if (k < 0)
  101.                   k += 256;
  102.                sb.append("%" + Integer.toHexString(k).toUpperCase());
  103.             }
  104.          }
  105.       }
  106.       return sb.toString();
  107.    }
  108. %>
  109. <%
  110.  response.reset();//如果在weblogic底下同样要加上此句
  111.  String filePath = request.getParameter("filePath");
  112.  String disName = request.getParameter("disName");
  113.   // 新建一个SmartUpload对象
  114.  SmartUpload su = new SmartUpload();
  115.   // 初始化
  116.  su.initialize(pageContext);
  117.   // 设定contentDisposition为null以禁止浏览器自动打开文件,
  118.   //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
  119.   //doc时,浏览器将自动用word打开它。扩展名为pdf时,
  120.   //浏览器将用acrobat打开。
  121.  su.setContentDisposition(null);
  122.   // 下载文件
  123.     String fileName = toUtf8String(disName);
  124.  try{
  125.   su.downloadFile(filePath,null,fileName);
  126.     }
  127.     catch(java.io.FileNotFoundException e){
  128.  %>
  129. <script Language="javascript">
  130.  alert('服务器上未找到要下载的文件!');
  131. </script>
  132. <%}
  133. %>下载完毕!
  134. 至此文件下载介绍完毕。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值