第一种方法试过了,不行。
String szHref=request.getParameter("Href");
  String path=request.getRealPath("");    //新建一个SmartUpload对象
  SmartUpload su = new SmartUpload();
  //初始化
  su.initialize(pageContext);
  //设定contentDisposition为null以禁止浏览器自动打开文件,
  //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
  //doc时,浏览器将自动用word打开它。扩展名为pdf时,
  //浏览器将用acrobat打开。
  su.setContentDisposition(null);
  //下载文件   
  //{{
  //如果不用如下的,则response.getWriter(),因为这个方法是和response.getOutputStream()相冲突
  //html这样的文档不能下载。
  out.clear();
  out = pageContext.pushBody();
  //}}
    
  String oFileName = new String(szHref.getBytes("gb2312"),"iso8859-1");   
  su.downloadFile(path+"\\DB\\UpLoad\\"+szHref,null,oFileName);
第二种方法 也不行。 //关于文件下载时采用文件流输出的方式处理:   
    
  response.reset();//可以加也可以不加   
  response.setContentType("application/x-download");  
    
String filedownload = "文件的物理路径+文件名";   
String filedisplay = "下载文件名";   
    
  response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);   
    
  java.io.OutputStream outp = null;   
  java.io.FileInputStream in = null;   
  try   
  {   
  outp = response.getOutputStream();   
  in = new FileInputStream(filenamedownload);   
    
  byte[] b = new byte[1024];   
  int i = 0;   
    
  while((i = in.read(b)) > 0)   
  {   
  outp.write(b, 0, i);   
  }   
    
outp.flush();   
    
out.clear();   
out = pageContext.pushBody();   
}   
  catch(Exception e)   
  {   
  System.out.println("Error!");   
  e.printStackTrace();   
  }   
  finally   
  {   
  if(in != null)   
  {   
  in.close();   
  in = null;   
  }   
//这里不能关闭   
//if(outp != null)   
  //{   
  //outp.close();   
  //outp = null;   
  //}   
  }   
两种方法保存时弹出一个保存框,正常的有 打开、保存、取消三个按钮,而我的没有打开按钮。点保存后文件类型显示未知,文件名也不是我设置的文件名。下载下来后用文件的真实类型打开也没问题。怎样才能让保存框自动识别文件类型,文件名实我设置的那个文件名呢?希望大家不吝赐教

解决方案 »

  1.   

    首先问个问题,你要下载什么类型的文件?
    response.setContentType("application/x-download");
    上面那句话的意思是指定文件类型,
    具体常用的文件类型,你可以参考
    http://www.360doc.com/content/08/0928/16/61497_1687997.shtml
      

  2.   

    各种类型啊,我写成
    response.setContentType("application/octet-stream");
    还是没有那样啊。。
      

  3.   

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String fileName = "个人出行_" + sdf.format(new Date()) +".xls";
    System.out.println(fileName);
    response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("GBK"), "iso-8859-1"));
    response.addHeader("Content-Length", ""); 
    response.setContentType("application/x-download");这样写就可以,可能需要增加一个名称,就能提示是excel