J2EE方面实现多文件上传比较容易,但是现实多文件的下载,有点麻烦,方法网上讲有几种,我采用的是打包下载,但是在我的项目中,想把查询出来的Ext.grid 数据列表作为excel文件导出,跟每条数据相关的表单文件也一起导出来,为了导出后在查看excel文件时候能够点击文件编号就能打开word文件所以又得处理excel文件。
1.首先是ext下载grid列表到excel文件中。网上能找到很多,如:http://extjs.org.cn/node/324
但是那都只是导出当前页的grid数据,我想导出的是所有的不分页的数据。
if (Ext.isIE6 || Ext.isIE7 || Ext.isIE8 || Ext.isSafari|| Ext.isSafari2 || Ext.isSafari3) {//||Ext.isChrome||Ext.isGecko 支持chrome 和firefox
if (!Ext.fly('frmDummy')) {
var frm = document.createElement('form');
frm.id = 'frmDummy';
frm.name = id;
frm.className = 'x-hidden';
document.body.appendChild(frm);
}
Ext.Ajax.request({
url : this.url, //查询的url
method : 'POST',
form : Ext.fly('frmDummy'),
callback : function(o, s, r) {},
isUpload : true,//这个很重要
params : this.getStore().baseParams //查询的参数
})
} else {
Ext.Msg.alert('操作提示', '不支持该浏览器,请选择IE!');
}
后台接受请求后处理查询出来的list集合。我采用的是poi生成excel文件。生成excel的代码见附件中ExcelUtils.java,
java打zip包,javaAPI中有个包叫java.util.zip用来处理zip打包文件的。但是打包时文件名为中文就会乱码,所以我用truezip.jar。这样就解决了文件名乱码的问题。打包代码见附件ZipUtils.java。
下面是后台处理1:
TYwfl tyw = tywflDAO.findById(mbd.getIntYwid());
if (mbd.getStrChaXun() == null || mbd.getStrChaXun().trim().length() < 0) {
mbd.setStrChaXun("");
}
List<TBd> list_bd = tbdDAO.findByJPQL("select model from TBd model where model.bdZt=12 and( model.tywflBybdYwflid.classId = ? or model.tywflBybdYwflid.parentPath like '" + tyw.getParentPath()
+ "," + mbd.getIntYwid() + ",%' or tywflBybdYwflid.parentId=? ) and model.bdMc like '%" + mbd.getStrChaXun() + "%' order by model.bdId", mbd.getIntYwid(), mbd.getIntYwid());
String basepath = ServletActionContext.getServletContext().getRealPath("soa/");// soa的服务器绝对地址
SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String time = bartDateFormat.format(new Date());
String excelname = basepath + "/tmp/" + tyw.getClassName() + time + ".xls";// excel文件的绝对地址
String zipname = basepath + "/tmp/" + tyw.getClassName() + time + ".zip";// zip文件的绝对地址
String zipcontextpath = "soa/tmp/" + tyw.getClassName() + time + ".zip";// zip文件在服务器上的url下载地址
ExcelUtils excel = new ExcelUtils(excelname);
excel.exportXLS(list_bd);
ZipUtils.outPutZip(basepath, list_bd, zipname, excelname);
setStrFileName(tyw.getClassName() + time + ".zip");
setInputPath(zipcontextpath);
return XIAZAI;
处理2:InPutSream的生成
public InputStream getInputStream() {
return ServletActionContext.getServletContext().getResourceAsStream(inputPath);//inputPath是相对服务器的地址,不是本地地址
}
处理3:下载文件名乱码问题
public String getStrFileName() {
try {
strFileName = new String(strFileName.getBytes("gb2312"), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
// e.printStackTrace();
return "unkown";
}
return strFileName;
}
处理4:配置文件
<result name="xiazai" type="stream">
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="${strFileName}"</param>
<param name="bufferSize">4096</param>
</result>
分享到:
相关推荐
Struts2+Ext登录整合完整版 Struts2+Ext登录整合完整版 Struts2+Ext登录整合完整版 Struts2+Ext登录整合完整版 Struts2+Ext登录整合完整版 Struts2+Ext登录整合完整版 Struts2+Ext登录整合完整版 Struts2+Ext登录...
struts2+ext实例struts2+ext实例struts2+ext实例struts2+ext实例struts2+ext实例struts2+ext实例struts2+ext实例struts2+ext实例struts2+ext实例
关于struts2的批量文件下载,文件的下载
struts2批量下载jar
ext struts2 swfupload 跨域文件上传
自己做的一个struts2 实现文件批量上传功能,
一个Struts2+Ext+SQL Server 2000实例
struts1实现的文件批量上传,java实现
很受网络上庞杂的Struts2上传下载的误导,很多没有解决中文乱码问题,本例实现了Struts2批量上传与下载,中文乱码问题完美解决,供大家参考!
struts2 ajax 实现 批量上传文件(按ctr键 多选,并非多个文件选择输入框的),jar包太大删掉了 仅用了struts2 的jar包 加进去即可
struts2官方文档
struts2+ext例子 很经典 希望想了解的 下来看看
在struts2基础上实现的包括单文件、多文件的上传及下载
Struts2文件批量上传,里面有很多的web包,每一个都是一个完整的项目,每个web包中都有详细的说明文档
搭建EXTJS和STRUTS2框架(ext和struts2简单实例)
使用struts2实现文件下载功能,可以直接运行!
extjs整合struts2,适用于各类想要学习ext和struts2的人,希望你们能够挖掘出深层次的东西来
struts-2与ext集成的傻瓜教程希望对新学习ext的朋友有帮助。
这是根据uploadify3 2结合struts2搭建的文件上传环境 可以直接导入eclipse运行 每步实现基本都加了注释 以下是我碰到的问题: 1 判断session是否失效 本实例没测试这个问题 但在工作项目中碰到了 但原因在这里...