//前端关键代码
var qdGridPanel = new Ext.grid.GridPanel({
title : '<span class="commoncss">【文件发布明细】</span>',
region : 'east',
store : qdGridStore,
cm : qdGridColumns,
height : 300,
width : 620,
stripeRows : true,
trackMouseOver : true,
loadMask : true,
frame : true,
clicksToEdit : 1,
listeners: {
cellclick: function(a, b, c, e) { //点击某个grid的单元格 触发该事件
var record = a.getStore().getAt(b); //Get the Record 获取某行元素
var filepath = 'http://202.91.245.28:25808/pdf/3305/20190112/33052190211875_trainRecord.pdf'; //record.data.filepath 获取要下载的http文件路径
if(c=='5'){
//关键代码
var downloadIframe = document.createElement('iframe');
downloadIframe.src = '../../../dfo/biz_web/oper/EquUpLoadManager/loadfile.do?filepath='+filepath;
downloadIframe.style.display = "none";
document.body.appendChild(downloadIframe);
//注意 谷歌浏览器不会弹出下载框,直接会下载到默认路径
});
// window.open('../../../dfo/biz_web/oper/EquUpLoadManager/loadfile.do?filepath='+filepath);
}else{
return ;
}
// win(); //创建一个win窗口
}
}
});
//服务端代码
if(!"".equals(filepath)&&filepath!=null){
//根据条件得到文件路径
System.out.println("===========文件路径==========="+filepath);
url = new URL(filepath);
httpUrl = (HttpURLConnection) url.openConnection(); //链接 http路径的资源文件
//链接指定的资源
httpUrl.connect();
// 获取网络输入流
InputStream inStream = httpUrl.getInputStream(); //获取资源文件的流
//将文件读入文件流(相对路径)
//InputStream inStream = this.getServlet().getServletContext().getResourceAsStream("/uploaddata/template/AutoTemplate.xls");---测试 本地文件使用
//获得浏览器代理信息
final String userAgent = request.getHeader("USER-AGENT");
//判断浏览器代理并分别设置响应给浏览器的编码格式
String finalFileName = filepath.substring(filepath.lastIndexOf("/")+1);
if(userAgent.contains("MSIE")||userAgent.contains("Trident")){//IE浏览器
finalFileName = URLEncoder.encode(finalFileName,"UTF8");
System.out.println("IE浏览器");
}else if(userAgent.contains("Mozilla")){//google,火狐浏览器
finalFileName = new String(finalFileName.getBytes(), "ISO8859-1");
}else{
finalFileName = URLEncoder.encode(finalFileName,"UTF8");//其他浏览器
}
//设置HTTP响应头
response.reset();//重置 响应头
//response.setContentType("application/x-download");//告知浏览器下载文件,而不是直接打开,浏览器默认为打开
response.setHeader("Content-type", "application-download");
response.addHeader("Content-Disposition" ,"attachment;filename=\"" +finalFileName+ "\"");//下载文件的名称
response.setCharacterEncoding("utf-8");
//response.setContentType("multipart/octet-stream");x-msdownload
response.setContentType("multipart/x-msdownload");
// 循环取出流中的数据
byte[] b = new byte[1024];
int len;
while ((len = inStream.read(b)) > 0){
response.getOutputStream().write(b, 0, len);
}
response.getOutputStream().flush();
inStream.close();
response.getOutputStream().close();