分享

java实现文件下载(ie,firefox)

 fengpiaochen 2011-09-16
1、静态html文件中,可以是任意元素的点击事件触发下面的js脚本程序。解决了firefox和ie的文件名乱码的问题。
 
2、js文件:
function loadMobileClient(){
 var url = "mobileClient/loadMobileClient.htm?";
 window.location.href=url + 'filename=' + encodeURIComponent("19.wmv");
}
 
3、java文件:
public ModelAndView loadMobileClient(HttpServletRequest request, HttpServletResponse response){
  try {
   request.setCharacterEncoding("utf-8");
  } catch (UnsupportedEncodingException e1) {
   e1.printStackTrace();
  }
        String filename=request.getParameter("filename");
        File file=new File("d:/"+filename);
        response.setCharacterEncoding("UTF-8");
        //写明要下载的文件的大小
        response.setContentLength((int)file.length());         
        response.reset();
        response.setContentType("application/octet-stream");
        String agent = (String)request.getHeader("USER-AGENT");    
        if(agent != null && agent.indexOf("MSIE") == -1) {
         // FF          
         String enableFileName = "";
   try {
    enableFileName = new String(filename.getBytes("UTF-8"),"ISO-8859-1");
   } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
   }       
         response.setHeader("Content-Disposition", "attachment; filename=" + enableFileName);   
        } else {
            try {
        response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(filename, "UTF-8"));
       } catch (UnsupportedEncodingException e1) {
        e1.printStackTrace();
       }
        }
        response.setHeader("Connection", "close");
        try {
         FileInputStream fis=new FileInputStream(file);
            BufferedInputStream buff=new BufferedInputStream(fis);
            byte [] b=new byte[1024];//
            long k=0;            
            OutputStream myout=response.getOutputStream(); 
            while(k<file.length()){
                int j=buff.read(b,0,1024);
                k+=j; 
                myout.write(b,0,j);
            }
   myout.flush();
  } catch (IOException e) {
   e.printStackTrace();
  }   
  return null;
 }
 
已测试,完成!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多