JSP文件下载


        最近在做JSP网站的时候,需要实现文件上传下载,中间乱码问题很是让人头疼。尤其是下载时,于是乎把网上说的几种文件下载方式实现了一下。具体如下

        这里我们以根目录下《世说新语》.ppt作为下载文件


方法一、利用RequestDispatcher

   当输出文件名保存为中文时,不是乱码而是直接不读....怎么改没有看,因为网上都不是很推崇这种办法


 

response.setContentType("application/x-download");//设置为下载application/x-download  
      String filedownload = "/《世说新语》.ppt";//即将下载的文件的相对路径  
      String filedisplay = "《世说新语》.ppt";//下载文件时显示的文件保存名称  
      String filenamedisplay = URLEncoder.encode(filedisplay,"UTF-8");  
      response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);  
         
      try  
      {  
      RequestDispatcher dis = application.getRequestDispatcher(filedownload);  
      if(dis!= null)  
      {  
      dis.forward(request,response);  
      }  
      response.flushBuffer();  
      }  
      catch(Exception e)  
      {  
      e.printStackTrace();  
      }  



方法二、利用流(主流)

 网上很多推荐用这个

//加上response.reset(),并且所有的%》后面不要换行,包括最后一个
 response.reset();
 response.setContentType("application/x-download");
 
 //application
 String path = request.getRealPath("/");
 String filedownload = path+"《世说新语》.ppt";
 String filedisplay="《世说新语》.ppt";
 

//处理文件名乱码
 filedisplay = URLEncoder.encode(filedisplay, "UTF-8");

 response.addHeader("Content-Disposition","attachment;filename=" + filedisplay); OutputStream outp = null; FileInputStream in = null; outp = response.getOutputStream(); in = new FileInputStream(filedownload); 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.popBody(); in.close(); out.close();


在几个浏览器试了一下,发现用火狐时,文件名依然乱码。

原因是火狐内核不同,解析方式不同,需要不同乱码处理方案。于是修改如下

String agent = (String)request.getHeader("USER-AGENT");   
        if(agent != null && agent.indexOf("MSIE") == -1) {// FF    
           filedisplay = new String(filedisplay.getBytes("utf-8"), "iso-8859-1");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + filedisplay); 
        } else { // IE    
           filedisplay = URLEncoder.encode(filedisplay, "UTF-8");
 response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);
        }

方法三、用SmartUpLoad


   smartUpLoad 还是比较方便的包,上传下载的文件控制操作起来方便很多。文件乱码网上也给出了方案,需要改源代码,这里就不细说。但是做出的效果依然是用火狐浏览器会乱码,应该是也加上浏览器判断,修改一下相应的编码问题。这里给个smartUPLoad简单的例子

还有很多方法,大家可以网上看一下文档//初始化


//初始化
SmartUpload su = new SmartUpload();
//初始化
su.initialize(pageContext);
//设定contetnDisposition为null 禁止浏览器自动打开文件
//保证点击连接后是下载文件。若不设定,则下载的文件扩展名为
//doc时,浏览器将自动用word打开。扩展名为pdf时,
//浏览器将用acrobat打开
su.setContentDisposition(null);
//下载文件,文件路径
su.downloadFile("《世说新语》.ppt");
//su.downloadFile("《世说新语》.ppt","ppt", "《世说新语》.ppt",1);


总结:在要求不高的情况下,还是喜欢第二种方法。毕竟用别人的包一旦有bug改起来还是相当麻烦..



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值