CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

关于jsp页面文件下载的问题

楼主mrmxh(零度)2004-09-01 16:55:33 在 Java / Web 开发 提问

服务器tomcat5.0.16  
  jsp页面内超链接<a   href="***.rar">***</a>  
  点击超链接的时候不是弹出提示框(打开or保存),而是把rar文件显示成乱码,  
  不知道如何解决这个问题,还请多帮忙,只要弹出提示框可以保存就可以了,  
  不想做下载文件的程序了,请多帮忙了!!多谢,多谢!!! 问题点数:20、回复次数:8Top

1 楼xx_ch(好客小虫)回复于 2004-09-01 17:03:24 得分 5

不想做下载文件的程序了,那你声明下载请用右键另存文件好了Top

2 楼xx_ch(好客小虫)回复于 2004-09-01 17:04:25 得分 0

另借你的地方问下我前2天问的问题,还没有解决  
   
  我使用jspsmartupload进行文件的上传和下载  
  在完全按照网上的例子来写的  
  下载页面如下  
  <%@   page   contentType="text/html;   charset=GBK"   %>  
  <%@   page   import="com.jspsmart.upload.*"   %>  
  <%  
  //   新建一个SmartUpload对象  
  SmartUpload   su   =   new   SmartUpload();  
  //   初始化  
  su.initialize(pageContext);  
  //   设定contentDisposition为null以禁止浏览器自动打开文件,  
  //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为  
  //doc时,浏览器将自动用word打开它。扩展名为pdf时,  
  //浏览器将用acrobat打开。  
  su.setContentDisposition(null);  
  //   下载文件  
  su.downloadFile("/upload/aa.txt");  
  %>  
   
  我直接在页面写下载代码也出同样的错误,代码如下:  
  <%@   page   contentType="text/html;   charset=gb2312"   %>  
  <%@   page   import="java.io.*"   %>  
  <%  
      String   fileName   =   "aa.txt".toString();  
  //读到流中  
  InputStream   inStream=new   FileInputStream("/upload/aa.txt");  
    //设置输出的格式    
      response.reset();    
      response.setContentType("bin");  
      response.addHeader("Content-Disposition","attachment;   filename="   +   fileName   );  
    //循环取出流中的数据    
      byte[]   b   =   new   byte[100];    
      int   len;    
      while((len=inStream.read(b))   >0)    
      response.getOutputStream().write(b,0,len);      
      inStream.close();    
  %>  
   
  大家帮我看看,谢谢  
   
  运行以后报错  
  java.lang.IllegalStateException:   getOutputStream()   has   already   been   called   for   this   response  
  Top

3 楼apicescn(两只蝴蝶_Allen)回复于 2004-09-01 18:04:02 得分 5

楼主用的平台是windows的吗?如果是的话,你可修改windows里面的文件夹选项来设置即可恢复下载保存对话框。Top

4 楼augustfox(奥古)回复于 2004-09-01 18:27:13 得分 0

apicescn(艾伦)    
  什么选项啊?Top

5 楼Tmsheng(对酒当歌)回复于 2004-09-01 20:39:42 得分 10

自己写了一个下载用的,你试一下。  
  package   com.ces.jyjl.util.download;  
   
  import   java.io.*;  
  import   java.sql.*;  
  import   java.net.*;  
   
  import   javax.servlet.http.HttpServletRequest;  
  import   javax.servlet.http.HttpServletResponse;  
   
  import   com.ces.jyjl.util.*;  
  import   oracle.jdbc.driver.OracleResultSet;  
  import   javax.servlet.ServletOutputStream;  
  import   oracle.sql.BLOB;  
  import   oracle.sql.CLOB;  
   
  /**  
    *   <p>Title:   监狱局后勤</p>  
    *   <p>Description:   </p>  
    *   <p>Copyright:   CES   Copyright   (c)   2004</p>  
    *   <p>Company:   CES</p>  
    *   @author   唐明胜  
    *   @version   1.0  
    */  
   
  public   class   WebDownload   {  
          private   String   contentType   =   "";  
          private   String   headerValue   =   "";  
          private   String   argFilePath   =   "";  
          private   InputStream   inStream   =   null;  
          private   HttpServletResponse   response   =   null;  
          private   HttpServletRequest   request   =   null;  
   
          /**  
            *   设置response的contentType类型。  
            *   @param   contentType   其值可参考ResponseContentType提供的值,  
            *   如果确切不知道如何设置,可以不用调用该方法,系统会自行辨认。  
            */  
          public   void   setContentType(String   contentType)   {  
                  this.contentType   =   (Tool.isEmpty(contentType))   ?   ""   :   contentType;  
          }  
   
          /**  
            *   功能:设置头部信息Content-Disposition的值。  
            *   @param   headerValue   头部信息Content-Disposition  
            */  
          public   void   setHeaderValue(String   headerValue)   {  
                  this.headerValue   =   (Tool.isEmpty(headerValue))   ?   ""   :   headerValue;  
          }  
   
          /**  
            *   功能:将数据库中的值显示出来,显示字段由sql语句确定,当有多个字段时,  
            *   只显示第一个字段的值。  
            *   @param   request   请求对象;  
            *   @param   response   反馈对象;  
            *   @param   sqlStr   sql查询语句;  
            *   @param   fileName   下载时想要显示给客户端的文件名  
            *   @throws   SQLException  
            */  
          public   void   downLoadFromField(HttpServletRequest   request,  
                                                                      HttpServletResponse   response,   String   sqlStr,  
                                                                      String   fileName)   throws   SQLException   {  
                  this.request   =   request;  
                  this.response   =   response;  
                  Connection   conn   =   null;  
                  Statement   st   =   null;  
                  ResultSet   rs   =   null;  
                  try   {  
                          request.setCharacterEncoding("GBK");  
                          conn   =   DAOUtil.getDBConnection();  
                          st   =   conn.createStatement();  
                          rs   =   st.executeQuery(sqlStr);  
                          ResultSetMetaData   rsmd   =   rs.getMetaData();  
                          String   fieldType   =   rsmd.getColumnTypeName(1).toUpperCase();  
                          String   fieldName   =   rsmd.getColumnName(1);  
                          String   checkType   =   "BLOB;CLOB;LONG;LONG_RAW;NBLOB;NCLOB";  
                          if   (rs.next())   {  
                                  if   (checkType.indexOf(fieldType)   >   -1)   {  
                                          if   (fieldType.equalsIgnoreCase("BLOB"))   {  
                                                  BLOB   blobValue   =   (BLOB)   rs.getObject(1);  
                                                  inStream   =   blobValue.getBinaryStream();  
                                          }   else   if   (fieldType.equalsIgnoreCase("CLOB"))   {  
                                                  CLOB   clobValue   =   (CLOB)   rs.getObject(1);  
                                                  inStream   =   clobValue.binaryStreamValue();  
                                          }  
                                  }   else   {  
                                          inStream   =   rs.getBinaryStream(1);  
                                  }  
                                  setResponse(fileName);  
                                  download();  
                          }  
                  }   catch   (Exception   e)   {  
                          e.printStackTrace();  
                  }   finally   {  
                          DAOUtil.closeDBConnection(conn);  
                  }  
          }  
   
          /**  
            *   功能:将服务器路径下的文件下载。  
            *   @param   request   页面请求对象  
            *   @param   response   页面回馈对象  
            *   @param   file   要下载的文件  
            */  
          public   void   downloadFormFile(HttpServletRequest   request,   HttpServletResponse   response,   File   file){  
                  if(file   ==   null   ||   !file.exists()   ||   file.isDirectory()){  
                          return;  
                  }  
                  this.request   =   request;  
                  this.response   =   response;  
                  try   {  
                          request.setCharacterEncoding("GBK");  
                          String   fileName   =   file.getName();  
                          inStream   =   new   FileInputStream(file);  
                          setResponse(fileName);  
                          download();  
                  }   catch   (UnsupportedEncodingException   e)   {  
                          e.printStackTrace();  
                  }   catch   (FileNotFoundException   e)   {  
                          e.printStackTrace();  
                  }  
          }  
  Top

6 楼Tmsheng(对酒当歌)回复于 2004-09-01 20:40:17 得分 0

package   com.ces.jyjl.util.download;  
   
  import   java.util.List;  
  import   java.util.ArrayList;  
   
   
  public   class   ResponseContentType   {  
      public   static   final   String   TEXT_CSS   =   "text/css";  
      public   static   final   String   TEXT_HTML   =   "text/html";  
      public   static   final   String   TEXT_PLAIN   =   "text/plain";  
      public   static   final   String   TEXT_RICHTEXT   =   "text/richtext";  
      public   static   final   String   TEXT_RTF   =   "text/rtf";  
      public   static   final   String   TEXT_SGML   =   "text/sgml";  
      public   static   final   String   TEXT_XML   =   "text/xml";  
   
      public   static   final   String   IMAGE_CGM   =   "image/cgm";  
      public   static   final   String   IMAGE_GIF   =   "image/gif";  
      public   static   final   String   IMAGE_JPEG   =   "image/jpeg";  
      public   static   final   String   IMAGE_PNG   =   "image/png";  
      public   static   final   String   IMAGE_TIFF   =   "image/tiff";  
   
      public   static   final   String   VIDIO_MPEG   =   "vidio_mpeg";  
   
      public   static   final   String   MODEL_VRML   =   "model/vrml";  
      public   static   final   String   MODEL_IGES   =   "model/iges";  
      public   static   final   String   MODEL_MESH   =   "model/mesh";  
   
      public   static   final   String   APPLICATION_OCTET_STREAM   =   "application/octet-stream";  
      public   static   final   String   APPLICATION_JAVA   =   "application/java";  
      public   static   final   String   APPLICATION_POSTSCRIPT   =   "application/postscript";  
      public   static   final   String   APPLICATION_PDF   =   "application/pdf";  
      public   static   final   String   APPLICATION_ZIP   =   "application/zip";  
      public   static   final   String   APPLICATION_MSWORD   =   "application/msword";  
      public   static   final   String   APPLICATION_XML   =   "application/xml";  
   
      private   static   List   resContList   =   null;  
      /**  
        *   功能:对文件类型进行初始化  
        */  
      static   void   initResContTable(){  
          if(resContList   ==   null){  
              resContList   =   new   ArrayList();  
              resContList.add(TEXT_CSS);  
              resContList.add(TEXT_HTML);  
              resContList.add(TEXT_PLAIN);  
              resContList.add(TEXT_RICHTEXT);  
              resContList.add(TEXT_RTF);  
              resContList.add(TEXT_SGML);  
              resContList.add(TEXT_XML);  
              resContList.add(IMAGE_CGM);  
              resContList.add(IMAGE_GIF);  
              resContList.add(IMAGE_JPEG);  
              resContList.add(IMAGE_PNG);  
              resContList.add(IMAGE_TIFF);  
              resContList.add(VIDIO_MPEG);  
              resContList.add(MODEL_VRML);  
              resContList.add(MODEL_IGES);  
              resContList.add(MODEL_MESH);  
              resContList.add(APPLICATION_OCTET_STREAM);  
              resContList.add(APPLICATION_JAVA);  
              resContList.add(APPLICATION_POSTSCRIPT);  
              resContList.add(APPLICATION_PDF);  
              resContList.add(APPLICATION_ZIP);  
              resContList.add(APPLICATION_MSWORD);  
              resContList.add(APPLICATION_XML);  
          }  
      }  
   
      static   String   getContentType(String   fileName){  
          initResContTable();  
          String   contentType   =   "application/x-msdownload";  
          if(fileName.indexOf(".")   >   -1){  
              String   fileType   =   fileName.substring(fileName.lastIndexOf(".")   +   1);  
              int   size   =   resContList.size();  
              String   contTypeName   =   "";  
              fileType   =   fileType.toLowerCase();  
              for(int   i   =   0;   i   <   size;   i++){  
                  contTypeName   =   (String)resContList.get(i);  
                  if(contTypeName.indexOf(fileType)   >   -1){  
                      contentType   =   contTypeName;  
                      break;  
                  }  
              }  
          }  
          return   contentType;  
      }  
  }  
  Top

7 楼mrmxh(零度)回复于 2004-09-03 11:25:16 得分 0

好了,多谢各位了,按你们的方法就很简单了!!!  
  结贴结贴Top

8 楼mycsdnid(大佬)回复于 2004-09-05 14:41:17 得分 0

好像还没有结贴啊Top

相关问题

  • 点击jsp文件怎么就会出现下载页面呢?
  • 如何防止用下载软件直接输入jsp页面文件地址,而下载jsp文件?
  • JSP页面中实现文件下载后怎么JAVASCRIPT不管用了?
  • 如何在jsp页面中实现文件下载(与后台相配合)
  • 如何在jsp页面中实现文件下载(与后台相配合)---继
  • JSP页面如何判断用户是否曾经下载过文件
  • jsp页面 下载的 word文档的名字,是中文的不能下载,怎样下载中文的文件名,
  • 我的jsp下载页面能工作,但下载下来的文件内容都乱码了,高手们帮忙看看,都是书上的源码啊!!!
  • 为什么转到jsp文件变成下载jsp文件了?
  • 关于jsp文件下载的问题

关键词

  • 页面
  • 下载
  • 文件
  • 字段
  • ces
  • headervalue
  • jyjl
  • contenttype
  • fieldtype
  • blob

得分解答快速导航

  • 帖主:mrmxh
  • xx_ch
  • apicescn
  • Tmsheng

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo