`

struts2 动态压缩成zip文件下载(不生成临时文件)

阅读更多
功能:文件下载
简述:
1.根据画面上的复选框进行文件打包下载
2.待下载文件保存在服务器的硬盘上,打包过程中不生成临时文件
3.打包过程中需要动态创建一个txt文件一并打进zip包中
4.页面上没有文件被选择的场合,按下【下载】按钮后,什么都不做(不刷新页面)

部分内容参考自互联网,如果错误,欢迎指正。

Struts配置文件
<!-- 数据下载Action -->
<action name="downZip" class="DownloadAction">
	<result name="nodata" type="httpheader">
		<param name="status">204</param>
	</result>
</action>


Action代码
	private OutputStream res;
	private ZipOutputStream zos;

	// action的主方法
	public String execute() throws Exception { 
		
		if (有数据可下载) {;
			// 预处理
			preProcess();

		} else {
			// 没有文件可下载的场合,返回nodata,设定参照struts配置文件
			return "nodata";
		}

		// 在这里编辑好需要下载的数据
		// 文件可以是硬盘上的
		// 文件也可以是自己写得数据流,如果是自己写得数据流,请参看outputZipFile方法中的【2.】
		File file = new File();
		file = ...
		outputZipFile(file);
		
		// 后处理
		afterProcess();
		
		return null; 

	}

	// 预处理
	public void preProcess() throws Exception {
		
		HttpServletResponse response = ServletActionContext.getResponse();
		
		res = response.getOutputStream();

		//清空输出流 
		response.reset();   

		//设定输出文件头 
		response.setHeader("Content-disposition ","attachment; filename=a.zip ");   
		response.setContentType("application/zip");
		zos = new ZipOutputStream(res);
		
	}

	// 后处理
	public void afterProcess() throws Exception {
		zos.close();
		res.close();
	}

	// 写文件到客户端
	private void outputZipFile(File file) throws IOException, FileNotFoundException {
		ZipEntry ze = null;
		byte[] buf = new byte[1024];
		
		int readLen = 0;
		
		// 1.动态压缩一个File到zip中
		// 创建一个ZipEntry,并设置Name和其它的一些属性
		// 压缩包中的路径和文件名称
		ze = new ZipEntry("1\\1\\" + file.getName());
		ze.setSize(file.length());
		ze.setTime(file.lastModified());

		// 将ZipEntry加到zos中,再写入实际的文件内容
		zos.putNextEntry(ze);
		InputStream is = new BufferedInputStream(new FileInputStream(file));

		// 把数据写入到客户端
		while ((readLen = is.read(buf, 0, 1024)) != -1) {
			zos.write(buf, 0, readLen);
		}
		is.close();
		
		// 2.动态压缩一个String到zip中
		String customFile = "This is a text file.";

		// 压缩包中的路径和文件名称
		ZipEntry cze = new ZipEntry(“1\\1\\” + "Test.txt");
		zos.putNextEntry(cze);

		// 利用ByteArrayInputStream把流数据写入到客户端
		is = new ByteArrayInputStream(customFile.getBytes());
		while ((readLen = is.read(buf, 0, 1024)) != -1) {
			zos.write(buf, 0, readLen);
		}
		
	}


2
0
分享到:
评论

相关推荐

    struts2必要lib.zip

    这个名为"struts2必要lib.zip"的压缩文件包含了运行基于Struts2的应用程序所必需的一些核心库。让我们逐一解析这些库的作用和重要性。 1. **commons-logging**: Apache Commons Logging 是一个接口层的日志工具,它...

    struts2 annotation 批量下载

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

    struts2批量下载

    为了提供批量下载体验,可以创建一个ZIP文件,将所有待下载的文件压缩在一起,然后让用户下载这个单一的ZIP文件。 5. **安全性与优化**: 在实现批量下载时,需要注意安全性和性能优化。例如,限制最大下载文件...

    struts2.18 all zip

    在"struts2.18 all zip"中,包含了三个重要的压缩子文件,分别是: 1. struts-2.1.8.1-apps.zip:这个文件包含了Struts2.1.8.1版本的一些示例应用和模板,这些应用展示了如何在实际开发中使用Struts框架。开发者...

    struts-2.5.20-min-lib.zip

    在"struts-2.5.20"这个压缩包子文件中,我们可以预期找到一系列的jar文件,如`struts2-core.jar`,这是Struts2框架的核心库,包含了Action、Result、Interceptor等关键组件的实现。此外,还可能有其他依赖的库,如`...

    struts2教程(完全版)

    在开始使用Struts2之前,需要下载Struts2的发行包,例如`struts-2.1.6-all.zip`。解压缩后,可以看到`apps`目录包含自带的示例程序,`docs`目录包含官方文档,`lib`目录存储所有必需的JAR文件,`src`目录则存放源...

    struts整合json用到Jar.zip

    在这个"struts整合json用到Jar.zip"压缩包中,包含的文件很可能是用来支持Struts框架与JSON交互所需的JAR库。下面将详细介绍Struts整合JSON的相关知识点: 1. **JSON插件安装**:在Struts2中,通常需要引入一个名为...

    传智播客Struts2课件

    首先,要开始开发Struts2应用,你需要从Apache官网下载Struts2的完整包,通常是struts-2.x.x-all.zip,这里以2.1.6为例。解压缩后,你可以在lib目录下找到所有必要的JAR文件。这些JAR文件包括: 1. struts2-core-2....

    struts2中导入类库时需要注意的问题

    解压缩下载的zip文件后,你会看到一个名为`lib`的文件夹,其中包含了大量的jar包。然而,并非所有的jar包都需要导入到你的项目中,过多的jar包可能导致不必要的冲突或者错误。 以下是必须导入的几个核心jar包: 1. ...

    Struts2-Scan-master.zip

    在压缩包子文件的文件名称列表中,只给出了"Struts2-Scan-master",这可能是项目的根目录,其中可能包含源代码、文档、测试案例、依赖库以及其他相关资源。通常,这样的目录结构会包括如下部分: 1. `src`:源代码...

    struts-2.3.25-all.zip part1

    标题中的"struts-2.3.25-all.zip part1"表明这是一个包含Struts 2框架版本2.3.25所有组件的压缩文件的第一部分。这个版本可能是为了帮助开发者避免已知的Struts 2漏洞,确保应用程序的安全性。 Struts 2的核心组件...

    struts2实例和详细介绍

    - **准备工作**:首先,你需要下载Struts2的发行包,例如struts-2.1.6-all.zip。解压缩后,你会看到几个关键目录,如`apps`包含示例程序,`docs`包含官方文档,`lib`存储所有必需的JAR文件,`src`存放源代码。 - *...

    传智播客 struts2 讲师黎活明

    开发Struts2应用首先需要下载Struts2的核心库。可以从官方站点http://struts.apache.org/download.cgi#struts2014获取最新版本的struts-2.x.x-all.zip。解压缩后,开发所需的JAR文件位于lib目录下。基础的Struts2...

    基于Struts的图书管理系统源码.zip

    4. **jsp**:展示层的JSP文件,用于生成动态网页内容。 5. **resources**:可能包含数据库连接配置文件(如db.properties)和Spring的配置文件。 6. **WEB-INF/classes**:编译后的Java类文件和资源文件。 7. **logs...

    [信息办公]基于struts的图书管理系统_struts_ts.zip

    【压缩包子文件的文件名称列表】:[信息办公]基于Struts的图书管理系统_struts_ts.rar 这个RAR文件很可能是整个项目的源代码包,包含了实现图书管理系统所需的全部文件,包括但不限于Java源代码、配置文件、视图...

    struts安装

    例如,这里提到的是 Struts 1.1 beta1 版本,包括 jakarta-struts-1.1-b1-src.zip 和 jakarta-struts-1.1-b1-lib.zip 文件。 2. **软件需求** - 安装 Struts 需要 Java 开发环境 (JDK),至少是 1.2 版本或更高。 ...

Global site tag (gtag.js) - Google Analytics