在Ext中直接实现文件的下载是比较困难的,最后通过模拟Form表单的提交来实现文件的下载。
1、首先是客户端:
<a href="javascript:void(0)" type="test" style="color:blue;text-decoration:underline">下载</a>
这段代码是放入在一个Ext.XTemplate中的。
2、捕捉上面链接里面的"click"事件,然后进行处理:
onClick : function(e){ var href = e.getTarget('a', 4, true); if(href){ var type = href.dom.type; if (!Ext.fly('frmDummy')){ var frm = document.createElement('form'); frm.id = 'frmDummy'; frm.name = id; frm.className = 'x-hidden'; frm.action = 'get.file?type=' + type; frm.method = 'post'; frm.target = '_blank'; document.body.appendChild(frm); } Ext.fly('frmDummy').dom.submit(); } }
从上面的代码可以看出,其本质是通过代码的方式创建一个"form"表单,设置相关属性后再提交。
3、Servlet中的代码为:
File source = new File("文件的路径!");
resp.reset();
resp.setContentType("application/force-download");
resp.setHeader("Content-Disposition", "attachment; filename=\""+ source.getName() + "\"");
resp.setHeader("Pragma", "No-cache");
resp.setHeader("Cache-Control", "no-cache");
ServletOutputStream sos = resp.getOutputStream();
BufferedInputStream fin = new BufferedInputStream(new FileInputStream(source));
byte[] content = new byte[1024];
int length;
while ((length = fin.read(content, 0, content.length)) != -1) {
sos.write(content, 0, length);
}
fin.close();
sos.flush();
sos.close();
这样就可以实现Ext客户端下载服务器上面的某个文件了。