`

struts2 多文件批量下载

 
阅读更多
   在一次项目实施中遇到客户提出对导出的单个文件进行分割为多个文件的需求,印象中未遇到过类似的文件导出功能。在网上搜索资料,研究struts2文件下载功能,未发现有支持此功能,但网上资料显示struts2支持批量文件下载功能,鉴于此思路实现代码如下。


配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD
Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
  <package name="oltConfig" extends="json-default">
     <action name="download" class="downLoadAction">
      <result name="success" type="stream">
       <param name="contentDisposition">
          attachment;filename="${fileName}"
       </param>
       <param name="contentType">
           application/octet-stream;charset=ISO8859-1
       </param>
       <param name="fileName">
           struts2中文附件.txt
       </param>
       <param name="inputName">
           downloadFile
       </param>
      </result>
    </action>
  </package>
</struts>

java 代码部分:
/**产生压缩文件函数
*/
public ByteArrayOutputStream baleZip(String[] names,String[]   fileContents) throws IOException{
   String temp = "导出文件失败,详情请查看日志!";
   ByteArrayOutputStream bout = new ByteArrayOutputStream();
   ZipOutputStream out = new ZipOutputStream(bout);
    for(int i=0,len=fileContents.length;i<len;i++){
try {
     out.putNextEntry(new ZipEntry(names[i]));
     if(fileContents[i]!=null){
           out.write(fileContents[i].getBytes());
      }else{
  out.write(temp.getBytes());
}
     } catch (Exception e) {
e.printStackTrace();
}
        }
      out.flush();
      out.close();
      return bout;
    }
/**返回下载文件流函数
*/
public InputStream getDownloadFile() {
   String strResult [] = {} ;
   String fileNames [] = new String [2];
   String fileContents[] = new String [2];
   String fileContent="";
   String vendorName ="";
   if(vendorId == 1){
      vendorName = "zte";
    }else if(vendorId == 2){
      vendorName = "hw";
    }else if(vendorId == 3){
      vendorName = "fh";
    }else if(vendorId == 4){
      vendorName = "bell";
}
    try {
if(vendorId.longValue() == 2){
strResult = this.genHwCmds(areaCode, frame, board, pon,   svlan, vendorId, devModel,ip,upModel,downModel,
lineModel,busiModel,voicePri,ITMSPri,IPTVPri,netWorkPri);
}else if(vendorId.longValue() == 1){
strResult = this.genZteCmds(areaCode, frame, board, pon,  svlan, vendorId, devModel, ip,upModel,downModel,onuType);
}else if(vendorId.longValue() == 4){
strResult = this.genBellCmds(areaCode, frame, board, pon, svlan, vendorId, devModel, ip, upModel, downModel);
}
        fileContents[0] = strResult[1];
        fileContents[1] = strResult[2];
       if(strResult[0].trim().equals("1")){
fileContent = "导出文件内容失败,详情请查看日志!";
this.fileName = vendorName+devModel+ip+this.getDateStr(new Date())+".txt";
ByteArrayOutputStream output=new ByteArrayOutputStream();
        output.write(fileContent.getBytes());
   InputStream in = new ByteArrayInputStream(output.toByteArray());
log.info("导出文件成功!");
return in;
      }else{
this.setFileName();
         fileNames[0] = vendorName+devModel+ip+this.getDateStr(new Date())+"Add.txt";
fileNames[0] = new String(fileNames[0].getBytes("ISO8859-1"),"UTF-8");//对文件名编码
fileNames[1] = vendorName+devModel+ip+this.getDateStr(new Date())+"Del.txt";
fileNames[1] = new String(fileNames[1].getBytes("ISO8859-1"),"UTF-8");
ByteArrayOutputStream bout = this.baleZip(fileNames, fileContents);
InputStream in = new ByteArrayInputStream(bout.toByteArray());
log.info("导出文件成功!");
return in;
}
     } catch (Exception ex) {
           ex.printStackTrace() ;
  log.info("导出文件异常!");
     }
  return null;
  }
实现思路如下:利用ant.jar包里的文件压缩功能对多个文件进行压缩,把压缩输入流返回给struts2,然后进行下载。
注意事项:1、实现过程中,最好不要使用临时文件形式,避免在没有磁盘写权限时出现错误,利用类ByteArrayOutputStream 将文件内容转化为压缩文件输出流。
          2、文件下载过程中,注意中文乱码问题,压缩文件实现方式最好调用ant.jar,不用java自带java.util.zip包,该包不支持压缩文件内含有中文名的文件(原因未研究)。
          3、文件类型未知时,文件配置类型为application/octet-stream。
          4、struts2导出文件大小有限制,可以在配置文件里修改默认大小。
分享到:
评论

相关推荐

    struts2 实现文件批量上传

    本项目实现了使用Struts2进行文件批量上传的功能,这涉及到几个关键的技术点,包括文件上传组件的选择、前端表单设计、后端处理逻辑以及存储策略。 1. **文件上传组件**:在Struts2中,我们通常使用`Commons ...

    struts2批量下载

    在Struts2框架中,批量文件下载是一种常见的需求,它允许用户一次性下载多个文件,而不是逐个点击下载。以下是对批量下载功能的详细解释和实现步骤: 1. **页面设计**: 首先,我们看到`index.html`,这是用户界面...

    struts2结合ext3批量下载文件

    在这个场景中,我们将讨论如何在Struts2中实现批量下载文件的功能,同时利用相关工具如Apache POI和TrueZip。 Apache POI是一个开源项目,用于处理Microsoft Office格式的文件,如Excel。在批量下载文件时,POI可能...

    Struts2文件批量上传

    Struts2文件批量上传是Java Web开发中常见的一种功能,主要应用于网站后台处理大量用户上传的文件,如图片、文档等。Struts2是一个强大的MVC框架,它提供了丰富的功能来支持文件上传操作,包括单个文件上传和批量...

    struts2中的批量上传与文件下载(解决中文乱码问题)

    本文将详细介绍如何在Struts2框架下实现批量上传与文件下载,并解决中文乱码问题。 一、Struts2文件上传 1. 配置Struts2文件上传支持: 在struts.xml配置文件中,我们需要添加`&lt;constant&gt;`元素来设置允许上传的...

    Struts2 单个、批量文件上传 精简源码

    在Struts2中,批量上传通常涉及到`List&lt;File&gt;`或`List&lt;Part&gt;`类型的属性,以接收多个文件。用户可以选择多个文件,然后这些文件会被一起发送到服务器。在Action中,你需要遍历这个列表并保存每个文件。 例如,批量...

    struts2 annotation 批量下载

    综上所述,Struts2框架下的批量下载功能不仅涉及到注解的灵活运用,还需要对文件流、压缩技术、临时文件管理、日期时间处理、字符编码以及日志记录等多方面知识有深刻理解。同时,合理设计实体类与服务层的交互,...

    Struts2批量上传

    Struts2框架提供了强大的文件上传支持,使得开发者能够轻松实现批量文件上传功能。本文将深入解析Struts2批量上传机制,包括其工作原理、代码实现细节以及如何在JSP页面和Action层进行集成。 #### 二、Struts2批量...

    struts1实现的文件批量上传

    在本文中,我们将探讨如何使用Struts1框架实现文件的批量上传功能。Struts1是一个经典的Java Web应用程序框架,它提供了模型-视图-控制器(MVC)架构,用于构建动态Web应用。在Struts1中实现文件上传,我们需要考虑...

    Struts2批量上传文件

    Struts2批量上传文件是一个常见的Web开发功能,用于允许用户一次性上传多个文件。在Struts2框架中,这个功能可以通过其强大的Action支持和插件机制来实现。在本篇文章中,我们将深入探讨如何利用Struts2实现批量文件...

    extjs struts2 多图片批量上传控件

    在本场景中,"extjs struts2 多图片批量上传控件"是一个集成解决方案,允许用户通过ExtJS前端框架批量上传多张图片,并通过Struts2后端框架进行处理。 **ExtJS** 是一个基于JavaScript的UI库,它提供了丰富的组件和...

    Struts2批量删除

    Struts2是一个强大的MVC(模型-视图-控制器)框架,被广泛应用于Java Web开发中。批量删除功能是Web应用程序中常见的需求,特别是在管理大量数据时,...通过查看这些文件,可以更深入地理解Struts2批量删除的实现细节。

    Struts2文件批量上传.zip

    在Struts2中,文件上传是常见的功能之一,特别是批量上传,可以处理用户一次性上传多个文件的需求。下面将详细介绍Struts2实现文件批量上传的相关知识点。 1. **Struts2的ActionContext与FileUpload插件** Struts2...

    基于Struts2.3的多文件批量上传/下载

    本篇文章将深入探讨如何在Struts2.3环境下实现多文件的批量上传和下载。 首先,我们需要理解文件上传的基本原理。在HTTP协议中,文件上传通常通过表单的`&lt;input type="file"&gt;`元素实现,然后服务器端的框架负责解析...

    struts2批量提交数据

    3. **配置Struts2**:在Struts2的配置文件(struts.xml)中,我们需要为批量提交的Action定义一个映射。 ```xml &lt;result name="success"&gt;/success.jsp &lt;result name="input"&gt;/input.jsp ``` 4. **处理请求**:...

    struts2批量下载(含源码)

    批量下载是Web应用中常见的一种功能,允许用户一次性下载多个文件,提高工作效率。在Struts2框架下实现批量下载,可以通过自定义拦截器或者Action来完成。 首先,我们需要了解Struts2的核心组件和工作流程。Struts2...

    Struts2批量插入

    总的来说,Struts2批量插入涉及到前端表单提交、Action处理、数据库操作等多个环节,理解并熟练掌握这些知识点,能够有效提高开发效率和系统性能。同时,结合源码阅读和工具应用,能进一步提升开发者的专业技能。

    struts2 批量上传 图片+文件

    在这个场景中,我们讨论的是如何在Struts2中实现图片和文件的批量上传,并且在上传过程中显示进度条。 批量上传是指用户可以一次性选择多个文件进行上传,而不仅仅是一个文件。这通常需要前端界面支持多选文件的...

    struts2+ajax实现批量上传文件(简单实现,自己加工)

    Struts2和Ajax技术结合可以实现用户界面与服务器之间的异步通信,从而提供更好的用户体验,尤其是在处理批量文件上传这样的任务时。在这个项目中,我们利用Struts2的Action和Ajax的异步特性来创建一个简单的批量文件...

Global site tag (gtag.js) - Google Analytics