`
qingfengxia
  • 浏览: 89073 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

用jspsmartupload下载文件

阅读更多

一般无论网站还是其他系统都会用到文件的上传和下载,对于文件的上传前面已经介绍过了,在本文中将详细介绍一下文件的下载实现以及经常碰到的问题,本文代码已经过调试,可以正常使用:

文件的下载一般采用的有两种方式:通过流或利用jspsmartupload.jar下载。

一.采用数据流下载:

第一个页面:(存在“下载”按钮的页面)

  

function doDownload(filePath,disName) {

      var utl="download.jsp?filePath="+filePath+"&disName="+disName;

      document.all.opForm.action=url;

//    document.all.opForm.target="_blank";

      document.all.opForm.submit();

}

<form name="opForm" method="post" action="">

<table width="10%" name="table1">

   <tr>

      <td>

<input name=”cmdDownload”onclick=”doDownload(‘<%=filePath%>’,’<%=fileName%>’)” value=”下载”>

      </td>

   </tr>

</table>

</form>

 第二个页面(download.jsp):

<%@ page import="java.io.OutputStream" %>

<%@ page import="java.io.FileInputStream" %>

<%

    //response.reset();

    //filePath为全路径:D:/upload/a.doc

    String path = request.getParameter("filePath");

    int k = path.lastIndexOf("/");

    String name = path.substring(k + 1 , path.length());

    response.setContentType("unknown");

    response.addHeader("Content-Disposition","filename=\"" + name + "\"");

    try {

        OutputStream os = response.getOutputStream();

        FileInputStream fis = new FileInputStream(path);

        byte[] b = new byte[1024];

        int i = 0;

        while((i = fis.read(b)) > 0) {

            os.write(b, 0 ,i);

        }

        fis.close();

        os.flush();

        os.close();

    } catch(Exception e) {

        e.printStackTrace();

    }

%>

如果只是这样写在tomcat底下可以正常使用,但weblogic底下会报如下错误:

java.net.ProtocolException: Exceeded stated content-length of: '19456' bytes

        at weblogic.servlet.internal.ServletOutputStreamImpl.checkCL(ServletOutputStreamImpl.java:219)

        at weblogic.servlet.internal.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:170)

        at com.jspsmart.upload.SmartUpload.downloadFile(SmartUpload.java:579)

        at com.jspsmart.upload.SmartUpload.downloadFile(SmartUpload.java:508)

        at jsp_servlet._page.__download._jspService(__download.java:184)

        at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)

        at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)

        at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)

        at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:431)

        at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)

        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)

        at com.nstc.web.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:30)

        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)

        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6297)

        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)

        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:97)

        at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3575)

        at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2573)

        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:178)

        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:151)

>

这是因为weblogic会向response中写东西造成的,解决方式是将此句response.reset();的注释打开,这样在使用response时先将其重置。

二 .利用jspsmartupload.jar实现下载

  第一个页面同上

  download.jsp实现如下:

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="com.jspsmart.upload.*" %>
<%!
   public String toUtf8String(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();
   }
%>
<%
 response.reset();//如果在weblogic底下同样要加上此句
 String filePath = request.getParameter("filePath");
 String disName = request.getParameter("disName");
  // 新建一个SmartUpload对象
 SmartUpload su = new SmartUpload();
  // 初始化
 su.initialize(pageContext);
  // 设定contentDisposition为null以禁止浏览器自动打开文件,
  //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
  //doc时,浏览器将自动用word打开它。扩展名为pdf时,
  //浏览器将用acrobat打开。
 su.setContentDisposition(null);
  // 下载文件
    String fileName = toUtf8String(disName);

 try{
  su.downloadFile(filePath,null,fileName);
    }
    catch(java.io.FileNotFoundException e){
 %>
<script Language="javascript">
 alert('服务器上未找到要下载的文件!');
</script>
<%}
%>下载完毕!

至此文件下载介绍完毕。

分享到:
评论
1 楼 xiaoyuqi00 2009-07-07  
c:/aoke_temp/userInfo20090707103741.xls
<2009-7-7 上午10时37分50秒 CST> <Error> <HTTP> <BEA-101005> <[weblogic.servlet.internal.WebAppServletContext@10abc94 - appName: '_appsdir_YDYWTEST_dir', name: 'YDYWTEST', context-path: '/YDYWTEST'] getRealPath() called with unsafe path: "c:/aoke_temp/userInfo20090707103741.xls".
java.io.IOException: 文件名、目录名或卷标语法不正确。
at java.io.WinNTFileSystem.canonicalize0(Native Method)
at java.io.Win32FileSystem.canonicalize(Win32FileSystem.java:395)
at java.io.File.getCanonicalPath(File.java:531)
at weblogic.servlet.internal.WebAppServletContext.getRealPath(WebAppServletContext.java:666)
at com.aoke.excel.download.SmartUpload.isVirtual(SmartUpload.java:905)
Truncated. see log file for complete stacktrace
>
<2009-7-7 上午10时37分50秒 CST> <Error> <HTTP> <BEA-101005> <[weblogic.servlet.internal.WebAppServletContext@10abc94 - appName: '_appsdir_YDYWTEST_dir', name: 'YDYWTEST', context-path: '/YDYWTEST'] getRealPath() called with unsafe path: "c:/aoke_temp/userInfo20090707103741.xls".
java.io.IOException: 文件名、目录名或卷标语法不正确。
at java.io.WinNTFileSystem.canonicalize0(Native Method)
at java.io.Win32FileSystem.canonicalize(Win32FileSystem.java:395)
at java.io.File.getCanonicalPath(File.java:531)
at weblogic.servlet.internal.WebAppServletContext.getRealPath(WebAppServletContext.java:666)
at com.aoke.excel.download.SmartUpload.isVirtual(SmartUpload.java:905)
Truncated. see log file for complete stacktrace
>

我这还有一个问题!

麻烦下楼主

相关推荐

    使用jspSmartUpload实现文件上传下载

    `jspSmartUpload`是一个非常实用的库,它简化了处理文件上传和下载的复杂性。本文将深入探讨如何使用`jspSmartUpload`来实现这两个功能,并详细解释其工作原理和相关知识点。 首先,`jspSmartUpload`是一个基于Java...

    使用jspSmartUpload组件在jsp中实现上传和下载

    1. **下载并解压**:首先从官方网站下载jspSmartUpload的最新版本,使用WinZip或WinRAR解压缩,得到jspSmartUpload.zip文件。 2. **JAR文件处理**:将解压缩后的jspSmartUpload.jar放置于Tomcat的shared/lib目录下...

    JspSmartUpload文件上传下载.zip

    在压缩包"JspSmartUpload文件上传下载.zip"中,我们可以看到以下几个关键文件和目录: - `文件上传下载.iml`:这是IntelliJ IDEA的项目配置文件,包含了项目的模块信息。 - `out`:编译后的类文件和资源文件所在的...

    jspSmartUpload.jar下载.rar

    综上所述,"jspSmartUpload.jar下载.rar"是一个教育相关的资源,它提供了在JSP环境中使用SmartUpload库进行文件上传功能的工具和教程。通过学习和实践,开发者能够更好地理解和掌握在Web应用中实现文件上传的技巧。

    jspSmartUpload 组件的上传下载完整实例

    下载即可运行,但是这个压缩包不支持中文名称的文件下载功能,我上传了一个可以下载中文的不会乱码的jspSmartUpload 组件,网址:http://download.csdn.net/detail/huahuahailang/4265620 照着使用,即可下载中文。

    jspSmartUpload上传下载

    上述代码展示了如何在JSP页面中使用SmartUpload实现简单的文件上传。 通过以上内容,我们可以看到JSP SmartUpload为开发者提供了一个高效、便捷的文件上传解决方案。无论是新手还是经验丰富的开发者,都可以快速地...

    jspsmartupload组件源码.zip_ jspSmartUpload_jsp_jsp 上传文件_jspSmartUplo

    **JSpsmartupload组件**是一个基于Java的上传文件解决方案,主要应用于JSP(Java Server Pages)环境中。这个组件提供了一种简单且强大的方式来处理用户通过网页上传的文件。在标题和描述中提到的,该组件的核心是用...

    使用JSP实现上传下载文件jspSmartUpload

    在本文中,我们将深入探讨如何使用JSP(JavaServer Pages)和jspSmartUpload库来实现文件的上传与下载功能。JSP是一种动态网页技术,它允许开发者在HTML中嵌入Java代码,从而创建交互式的Web应用程序。而jsp...

    jspsmartupload-解决中文乱码

    最近实验室做了一个项目,使用jspsmartupload来实现的文件的上传下载,原来在windows平台运行的挺好,但是后来系统移植到linux平台上,结果在上传或下载的文件名中有中文时就会出现乱码。后来查了网上一些人的解决...

    JspSmartUpload上传文件实例.rar

    JspSmartUpload上传文件实例,基于JspSmartUpload组件的文件上传实例,JspSmartUpload 上传类,在JSP中进行文件上传的类,内含文档和使用例子。这个在JSP编程环境下,使用频率还是挺高的,这个例子可帮助你在JSp环境...

    使用jspSmartUpload轻松实现上传和下载

    通过以上步骤,你可以利用`jspSmartUpload`在Java Web应用中实现高效且安全的文件上传和下载功能。注意,尽管`jspSmartUpload`是一个强大的工具,但它已经有些年头了,可能不支持最新的Java和Web技术。在新项目中,...

    jspSmartUpload实现文件上传下载

    ### jspSmartUpload实现文件上传下载 #### 一、SmartUpload简介 SmartUpload是一个非常流行的Java Web组件,用于处理文件的上传与下载操作。它简化了文件上传过程中的复杂度,使得开发人员能够轻松地在Web应用中...

    用jspsmartupload进行上传下载

    ### 使用jspSmartUpload进行文件上传与下载 #### jspSmartUpload简介 jspSmartUpload是一款用于处理文件上传功能的Java库,适用于JSP环境。它能够简化文件上传过程中的复杂度,提供一系列便捷的功能来帮助开发者...

    jspSmartUpload.zip

    jspSmartUpload是一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。该组件有以下几个特点: 1、使用简单。在JSP文件中仅仅书写三五行java代码就可以搞定文件的上传或下载,方便。 2...

    彻底解决jspsmartupload中文下载乱码问题

    用几个简单的java语句操作java.io.BufferedInputStream和java.io.BufferedOutputStream,就能彻底解决jspSmartUpload乱码问题。... zip包中包含了jspsmartupload.jar和文件上传、下载示例代码,直接使用即可。

    jspsmartupload.jar

     jspSmartUpload是由www.jspsmart.com网站开发的一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。该组件有以下几个特点: &lt;br&gt;1、使用简单。在JSP文件中仅仅书写三五行...

Global site tag (gtag.js) - Google Analytics