`
ninggy
  • 浏览: 112851 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

struts2结合ext3批量下载文件

阅读更多

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>

 

0
0
分享到:
评论
2 楼 lee20101029 2011-03-14  
多谢分享
1 楼 lee20101029 2011-02-25  
有完整的源代码共享一下不??

相关推荐

Global site tag (gtag.js) - Google Analytics