jsp实现下载功能弹出的文件保存框时,文件名不是设置的默认名、文件类型未知?速求正解

时间:2022-07-14 07:12:04
第一种方法试过了,不行。
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;    
   //}    
   }    


两种方法保存时弹出一个保存框,正常的有 打开、保存、取消三个按钮,而我的没有打开。点保存后文件类型显示未知,文件名也不是我设置的文件名。下载下来后用文件的真实类型打开也没问题。怎样才能让保存框自动识别文件类型,文件名实我设置的那个文件名呢?希望大家不吝赐教

9 个解决方案

#1


何必用SmartUpload 呢?我做下载都是直接用流的方式输出就行了,至于文件名和类型需要设置http Header来解决。以下是下载一个xml的http头设置:
response.setHeader("Content-disposition", "attachment; filename=" + downloadName + ".xml");//设定输出文件头
response.setContentType("application/x-msdownload");//定义输出类型

#2


我试过用流的方式写了,不行啊

#3


String filedisplay = "你的报表.xls";

/* 设置下载前的HTTP属性信息  */
response.setContentType("application/x-download");
filedisplay = URLEncoder.encode(filedisplay,"UTF-8");//估计你少了这句

response.setHeader("Content-Disposition","attachment;filename=" + filedisplay);

//接下来就是你的write部分代码

#4


filedisplay = URLEncoder.encode(filedisplay,"UTF-8");
filedisplay = new String(filedisplay.getBytes("gb2312"),"iso8859-1");
我都试过,还是不行。

#5


一个问题问几次,别人也不好回答你,。。。。

#6


学习一样啦

#7


下载文件就那么大点事,自己多试试代码吧。

#8


lakesea
(飘渺海) 

如果对我个人有意见,请私聊!如果没有什么实质性的解决方案请别回帖!谢谢理解!

#9


3楼正解:

String file = new String(request.getParameter("file").getBytes("ISO-8859-1"), "GBK");
File in = new File(baseDir + file);
response.setContentType( "application/x-download ");
file = URLEncoder.encode(file,"UTF-8");//估计你少了这句
response.setHeader( "Content-Disposition", "attachment;filename=" + file);

就OK了!

#1


何必用SmartUpload 呢?我做下载都是直接用流的方式输出就行了,至于文件名和类型需要设置http Header来解决。以下是下载一个xml的http头设置:
response.setHeader("Content-disposition", "attachment; filename=" + downloadName + ".xml");//设定输出文件头
response.setContentType("application/x-msdownload");//定义输出类型

#2


我试过用流的方式写了,不行啊

#3


String filedisplay = "你的报表.xls";

/* 设置下载前的HTTP属性信息  */
response.setContentType("application/x-download");
filedisplay = URLEncoder.encode(filedisplay,"UTF-8");//估计你少了这句

response.setHeader("Content-Disposition","attachment;filename=" + filedisplay);

//接下来就是你的write部分代码

#4


filedisplay = URLEncoder.encode(filedisplay,"UTF-8");
filedisplay = new String(filedisplay.getBytes("gb2312"),"iso8859-1");
我都试过,还是不行。

#5


一个问题问几次,别人也不好回答你,。。。。

#6


学习一样啦

#7


下载文件就那么大点事,自己多试试代码吧。

#8


lakesea
(飘渺海) 

如果对我个人有意见,请私聊!如果没有什么实质性的解决方案请别回帖!谢谢理解!

#9


3楼正解:

String file = new String(request.getParameter("file").getBytes("ISO-8859-1"), "GBK");
File in = new File(baseDir + file);
response.setContentType( "application/x-download ");
file = URLEncoder.encode(file,"UTF-8");//估计你少了这句
response.setHeader( "Content-Disposition", "attachment;filename=" + file);

就OK了!