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>
分享到:
相关推荐
Ext 文件上传参考文档主要涉及的是在Web开发中处理文件上传的场景,特别是使用ExtJS框架进行前端交互。ExtJS是一个强大的JavaScript库,用于构建复杂的、数据驱动的Web应用程序。文件上传是用户界面中的常见功能,...
这篇文档将详细介绍这些技术的结合使用,并探讨如何通过XML进行配置。 首先,让我们从Struts框架开始。Struts是Apache软件基金会的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web框架...
总的来说,“swfupload+ext2”项目结合了SwfUpload 的前端文件上传功能,Ext2 的富客户端界面,以及Struts2 的后端处理能力,形成了一套完整的文件上传解决方案。开发者可以通过导入这个项目到MyEclipse,快速地搭建...
本案例旨在通过Struts2框架与ExtJS前端库的结合来实现文件的批量上传、下载以及删除功能。适用于对Struts2与ExtJS有一定了解的开发者,特别是对于那些希望通过实战案例加深理解的初学者而言非常有用。 **技术栈**:...
Java正则表达式 批量上传--采集 (多个文件夹) The Agile Way hibernate mapping文件中的标记详解:关系标记 ANT 安装使用及build.xml文档模板 inverse和cascade在关联更新中的作用 hibernate ...