extjs 文件下载
图一
如图一点击:备份数据库文件。首先会完成数据库的备份,同时出现保存对话框供用户选择存储的位置以及自定义文件名称如图二。
图二
这个用到了response对象的contenttype,保存不同的文件需要不同的contenttype(具体可上网查)。
点击备份执行backUpSmu()函数具体实现如下:
function backUpSmu(){
Ext.Msg.wait('提示','正在备份,请稍后...');
Ext.Ajax.request({
url:"group.do?method=backUpSmu",
success:function(res){
//alert(res.responseText);
//通过执行window.open()来打开一个下载框图二
window.open('group.do?method=download&&fileName='+res.responseText);
Ext.Msg.hide();
}
});
}
java后台执行流操作。进入action group的download()方法。
public ActionForward download(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
try {
request.setCharacterEncoding("iso-8859-1");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String fileName = request.getParameter( "fileName" );
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream os = null;
InputStream is = null;
String filePath = servlet.getServletContext().getRealPath("/" + ROOT + fileName);//项目路径
try
{
File downloadFile = new File(filePath);
is = new FileInputStream(downloadFile);
bis = new BufferedInputStream(is);
os = response.getOutputStream();
bos = new BufferedOutputStream(os);
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");//处理中文文件名的问题
fileName = new String(fileName.getBytes("UTF-8"),"GBK");//处理中文文件名的问题
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");//文件类型contenttype
response.setHeader("Content-Disposition","attachment; filename=" + fileName); //关键部分,打开一个下载框
int bytesRead = 0;
byte[] buffer = new byte[8192];
while((bytesRead = bis.read(buffer,0,8192)) != -1)
{
bos.write(buffer, 0, bytesRead);
}
bos.flush();
is.close();
bis.close();
os.close();
bos.close();
}
catch(Exception e){
e.printStackTrace();
}
System.gc();
return null;
}
至此可最终实现在extjs中的文件下载功能。