$.ajax异步请求无法下载文件到浏览器本地的问题

 

  //open这种方式有个弊端,就是转的参数值不能太大,所以只能用jquery创建表单form在提交(ajax异步请求不会触发浏览器下载文件的功能)
           var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
              if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1) {//判断是否IE浏览器
                       window.location.href(url);
                   }else{
                       window.open(url,"xxx");
                   }  
方法1,window.open

 

 

方法2 js前端

 //导出
               $("#exportData").click(function() {  
                   var myqx =document.getElementById("qxId").contentWindow.document.getElementById("myqx");
                   var myqxD = $(myqx).val();
                   var id = $("input[name='myHidId']").val();
                   var url = __ctx+'/hyddrbnew/hyddrbnew/hyddrb/exportExcelDdrb.ht';
                   
                   var form = $("<form>");
                   form.attr("style","display:none");
                   form.attr("target","_blank");
                   form.attr("method","post");
                   form.attr("action",url);
                   var input1 = $("<input>");
                   input1.attr("type","hidden");
                   input1.attr("name","id");
                   input1.attr("value",id);
                   
                   var input2 = $("<input>");
                   input2.attr("type","hidden");
                   input2.attr("name","myqxD");
                   input2.attr("value",myqxD);
                   
                   $("body").append(form);
                   form.append(input1);
                   form.append(input2);
                   form.submit();
                   form.remove();
  
               }); 
方法2 js前端

 

方法2(java后端)

@RequestMapping({ "exportExcelDdrb" })
    @Action(description = "导出excel")
    public void exportExcelDdrb(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String id = RequestUtil.getString(request, "id");
        String imageMsg = RequestUtil.getString(request, "myqxD");
            //取得实体类数据
        Hyddrb yjbb = new Hyddrb();
        yjbb = (Hyddrb) hyddrbService.getById(Long.valueOf(Long.parseLong(id)));
        
        String dirPath = FileUtil.getRootPath() + File.separator + "commons" + File.separator + "template" + File.separator + "hydlbbTemplate" + File.separator;
        String fileName = "expHyTabDdrb.xls";
//        String fileName = "expHyTabDdrb.xlsx";
        FileInputStream inStream = new FileInputStream(new File(dirPath + fileName));
        
        //xls2003版
        HSSFWorkbook wb = new HSSFWorkbook(inStream);
        this.drawImage(wb, imageMsg);
        this.initSheetCell(wb, yjbb);
        //xlsx2007版
//        XSSFWorkbook wbxlsx = new XSSFWorkbook(inStream);
//        this.drawImage_xlsx(wbxlsx, imageMsg);
//        this.initSheetCell_xlsx(wbxlsx, yjbb);
        
        fileName = "调度日报_" + new SimpleDateFormat("yyyy-MM-dd").format(yjbb.getRq()) ;
        //其实两套代码都可以,最终结果以下面给定的后缀作为生成excel的后缀,即03版还是07版
        fileName +=  ".xls";
//        fileName +=  ".xlsx";

        response.setContentType("application/excel");
        response.addHeader("Content-Disposition", "attachment;filename=" + new String((fileName).getBytes("gb2312"), "ISO8859-1"));
        OutputStream out = response.getOutputStream();
        wb.write(out);
//        wbxlsx.write(out);
        out.flush();
        out.close();

    }
方法2后端

 

posted @ 2022-08-24 17:32  爱跳舞的程序员  阅读(515)  评论(0编辑  收藏  举报