//前端关键代码
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();