一:在写前端下载页面时,使用ajax方式调用action中的方法,然后就将下载内容返回js中了,所以没有下载,之后改为使用Windows.location进行下载,就没有问题了。
action中代码:
if(decode = null ll decode. length = 0){ log.warn("****无下载内容**) throw new Exception(); } String filename =contractNo+".pdf"; /设置文件名的编码 if(request.getHeader("user-agent "). toLowerCase().contains("msie")){ filename URLEncoder. encode(filename,"utf-8");//将不安全的文件名改为UTF-8格式 }else{ filename new String(filename. getBytes("utf-8"),"iso-8859-1");/火狐浏览器 } //告知浏览器要下载文件 response. setHeader("content-disposition","attachment; filename="+filename); response.setHeader("content-type,"application/pdf"); response setCharacterEncoding("utf-8)告知服务器使用什么编码 //创建一个文件输出流 out response getOutputStream(): out.write(decode); }catch(Exception e){ log.warn("****下载合同结束异******"); throw e; finally { if (out != null){ try { out.close(); catch(Exception e){ throw e; }
js中代码:
/*下载*/ function cfContractsignDownload(){ if($('#cfContractsignList')find".selected").length!== 1){ showMsg('请选择一行记录','warning'); return; } var rowData=$('#cfContractsignList').DataTable().rows(". selected").data()[0];//已经获取数据 if(rowData. contractNo != undefined & rowData. contractNo !=="&& rowData. contractNo !== null){ var url= contextPath +"/cfContractsign/cfContractsignDownload", var data={ contractNo:rowData.contractNo, sourceType: rowData. sourceType, consumerId: rowData. consumerId } //window.location=ur1;//请求不带参数 window.location=url+"?"+$.pram(data);//请求带参数 Else{ ); showMsgDuringTime(合同编号为空,不能下载!) }
文件下载资料:https://blog.csdn.net/feng2147685/article/details/80515371
二:js中使用xhr.open("get",url,true)
action中:
BufferedInputStream output = null; try { BeanResult data = cf12000008.downloadContract(cf12000008In); BaseResponse bresponse = data.getResponse(); CF12000008Out cf12000008Out =(CF12000008Out) bresponse; String fileInfo = cf12000008Out.getFileInfo(); String fileUrl = cf12000008Out.getFileUrl(); response.setHeader("content-type", "application/pdf"); out = response.getOutputStream(); //判断下载内容 if(BusiUtil.isNotNull(fileInfo)){ decode = Base64Utils.decode(fileInfo); //创建一个文件输出流 out.write(decode); }else if(BusiUtil.isNotNull(fileUrl)){ URL url = new URL(fileUrl); URLConnection conn = url.openConnection(); in = conn.getInputStream(); output = new BufferedInputStream(in); byte[] buff = new byte[1024*10]; int len = 0; while ((len=output.read(buff))>-1) { out.write(buff,0,len); } }else{ response.setHeader("content-type", "text/plain"); out.write(0); }
js中代码:
if($("#contractNo").val() !== "" && $("#contractNo").val() !== null && $("#contractNo").val() !== undefined){ var url = contextPath + "/cfContractSign/cfContractSignDownload"; var xhr = new XMLHttpRequest(); xhr.open("get", url +"?" +$.param(data), true); xhr.responseType = "blob"; xhr.onload = function() { if (this.status == 200) { var blob = this.response; if(blob.type == "text/xml"){ parent.showMsgDuringTime("下载失败,请检查合同编号"); return false }else if(blob.type == "text/plain"){ parent.showMsgDuringTime("下载失败,后台返回为空"); return false } var fileName = $("#contractNo").val()+".pdf"; if(window.navigator.msSaveOrOpenBlob){ // IE浏览器下 navigator.msSaveBlob(blob, fileName); } else { var link = document.createElement("a"); link.href = window.URL.createObjectURL(blob); link.download = fileName; link.click(); window.URL.revokeObjectURL(link.href); parent.showMsgDuringTime("下载成功"); contractAddCancel(); } }else{ showMsg('请求错误', 'warning'); } } xhr.onloadend = function(res){ } xhr.send(); }