在实际应用中,文件下载或导出报表的场景应该很常见,如Excel报表导出……如果文件较多时,用户往往希望文件能够打包进行下载,这个时候就需要对下载的文件进行压缩打包,再进行下载。针对这个场景,我写了个压缩文件打包下载的Demo,这里实现的是Excel文件的压缩下载,Excel生成用到了Apache的POI组件,压缩功能使用的JDK自带API,具体实现代码如下:
一、Controller类
/** * 压缩包下载控制器 * @author wdmcygah * */ @Controller @RequestMapping("/zip") public class ZipController { /** * 压缩文件下载处理 */ @RequestMapping("/download") public ModelAndView downloanExcel(){ List<UserInfo> list = new ArrayList<UserInfo>(); UserInfo userInfo = new UserInfo(); userInfo.setPassword("0000"); userInfo.setUserName("sdfas"); list.add(userInfo); list.add(userInfo); list.add(userInfo); list.add(userInfo); Map<String,List<UserInfo>> map = new HashMap<String, List<UserInfo>>(); map.put("infoList", list); ZipView ve = new ZipView(); return new ModelAndView(ve,map); } }
二、View类
/** * 下载Excel视图 * * @author wdmcygah * */ public class ZipView extends AbstractView { @Override protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception { HSSFWorkbook b1 = generateExcel(model); HSSFWorkbook b2 = generateExcel(model); File file = getFile(); ZipUtils.zip(getFile(), b1,b2); response.setContentType("application/octet-stream"); //这里为避免下载时中文乱码,需要进行url编码 String name = URLEncoder.encode("压缩.zip", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + name); OutputStream os = response.getOutputStream(); IOUtils.copy(new FileInputStream(file), os); os.flush(); os.close(); file.delete(); } private HSSFWorkbook generateExcel( Map<String,Object> model){ HSSFWorkbook result = null; @SuppressWarnings("unchecked") List<UserInfo> list = (List<UserInfo>) model.get("infoList"); if (list != null && list.size() != 0) { result = new HSSFWorkbook(); int len = list.size(); Sheet sheet = result.createSheet(); // 第一行文字说明 Row row = sheet.createRow(0); Cell cell = row.createCell(0, Cell.CELL_TYPE_STRING); cell.setCellValue("用户名"); cell = row.createCell(1, Cell.CELL_TYPE_STRING); cell.setCellValue("密码"); //下面是具体内容 for (int i = 0; i < len; i++) { row = sheet.createRow(i + 1); cell = row.createCell(0, Cell.CELL_TYPE_STRING); cell.setCellValue(list.get(i).getUserName()); cell = row.createCell(1, Cell.CELL_TYPE_STRING); cell.setCellValue(list.get(i).getPassword()); } } return result; } private File getFile(){ String targetPath = "/ziptarget/zip/"; File file = new File(targetPath); if( !file.exists() ){ file.mkdirs(); } String fileName = "test.zip"; File f = new File(targetPath+fileName); if( !f.exists() ){ try { File.createTempFile("001", ".zip"); } catch (IOException e) { e.printStackTrace(); } } return f; } }
三、压缩工具类
/** * 使用JDK自带的Zip处理类进行文件的压缩与解压 * */ public class ZipUtils { /** * 对Excel文件进行压缩 * * @param wb */ public static void zip(File targetFile, HSSFWorkbook... wbs) { if (wbs == null || wbs.length == 0) { return; } ZipOutputStream zos = null; try { zos = new ZipOutputStream(new FileOutputStream(targetFile)); for (int i = 0; i < wbs.length; i++) { ZipEntry entry = new ZipEntry("文件" + i + ".xls"); // 设置压缩包的入口 zos.putNextEntry(entry); wbs[i].write(zos); zos.flush(); } zos.close(); } catch (IOException e) { e.printStackTrace(); } } }
四、测试页面
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <h3>测试下载Excel功能</h3> <form action="file/download.htm" enctype="multipart/form-data" method="post"> <input type="submit" value="下载Excel"></input> </form> <h3>测试上传Excel功能</h3> <form action="file/upload.htm" enctype="multipart/form-data" method="post"> <input type="file" name="file"></input> <input type="submit" value="上传Excel"></input> </form> <h3>测试Excel的打包下载功能</h3> <form action="zip/download.htm" enctype="multipart/form-data" method="post"> <input type="submit" value="下载Excel打包文件"></input> </form> </body> </html>
完整源码可见我的Github地址:https://github.com/wdmcygah/research-spring
代码在Chrome浏览器下测试通过。
相关推荐
SpringMVC提供了便捷的文件上传支持,通过`@RequestParam("file") MultipartFile file`注解接收文件,并且可以处理文件的保存和下载操作。这涉及到文件流的读写以及文件存储策略。 异常处理是任何应用程序都需要...
1. **依赖管理**: 自动下载并管理项目所需的库文件。 2. **构建工具**: 支持编译、测试、打包、部署等一系列构建过程。 3. **标准化**: 通过约定优于配置的原则,简化项目配置。 4. **插件丰富**: 提供大量插件,...
本教程将探讨如何在SpringMVC中实现多版本接口管理、IP访问控制以及使用ANT工具进行打包并部署到Linux服务器。 首先,让我们深入理解**多版本接口**的实现。在API开发中,随着项目的迭代,可能会出现新旧接口共存的...
在使用"spring+springMVC全量jar包"时,开发者可以得到完整的Spring和SpringMVC框架,包括所有必需的依赖,这样无需单独下载和管理每个库,可以快速搭建项目环境。不过,现在更多的开发实践中,推荐使用构建工具如...
8. **部署与测试**:将项目打包成WAR文件,部署到Tomcat服务器上,通过浏览器访问测试接口,验证整个系统是否能够正常运行。 以上就是"Spring+SpringMVC+Mybatis框架项目整合"的关键知识点,整合这三大框架可以使...
### 基于Eclipse构建Maven的SpringMVC项目技术文档 #### 一、引言 在现代软件开发过程中,Maven作为一种自动化构建工具,因其便捷性与灵活性被广泛应用于Java项目的构建与管理中。SpringMVC作为Spring框架的一个...
- 配置SpringMVC的Servlet上下文配置文件(如`servlet-context.xml`),声明HandlerMapping和HandlerAdapter,以及视图解析器等。 2. **创建Controller** - 编写一个Controller类,比如`LoginController`,并使用...
jsp、jquery、jQuery.filer+后台JAVA SpringMcv 实现推拽,批量上传功能。 1、实现数据报表展示 2、新增,编辑,图片删除(物理删除) ...4、优化上传图片时动态传递参数,...8、自动识别单文件下载、多文件自动打包下载
CHM 文件是微软开发的一种帮助文件格式,它将一系列 HTML 页面打包成一个文件,内含索引和搜索功能。Spring MVC 3.0 引入了许多新特性,如支持注解驱动的控制器、支持异步处理、支持数据绑定和验证等。开发者可以...
它通过一个配置文件(pom.xml)来定义项目的信息、构建过程和依赖关系,帮助开发者自动下载所需的库文件,编译源代码,运行测试,以及打包和部署应用程序。 **SpringMVC核心组件** 1. **DispatcherServlet**:前端...
而"打包web项目.docx"则可能详细介绍了如何使用Maven的war插件进行项目打包,生成可供服务器部署的WAR文件。 "Maven模块项目"这个压缩包中还包含了一个整合说明,这将指导开发者如何配置Spring、SpringMVC和MyBatis...
在SpringMVC项目中,Maven可以帮助我们下载和管理所需的库,构建并打包项目。 搭建SpringMVC+Mybatis框架的第一步是创建一个新的Maven项目。在IDE如IntelliJ IDEA或Eclipse中,选择"New Project",然后选择"Maven...
2. **依赖管理**:通过在`pom.xml`文件中声明依赖,Maven可以自动下载并管理项目所需的所有库,避免了版本冲突的问题。 3. **构建工具**:Maven通过`mvn clean`, `mvn compile`, `mvn test`, `mvn package`等命令...
项目可以被打包成 WAR 文件,部署到 Tomcat 或其他 Servlet 容器中运行。IDE 如 IntelliJ IDEA 或 Eclipse 提供了便捷的导入和部署选项,使得开发者可以快速地进行开发和调试。 总的来说,"SpringMVC demo"项目展示...
3. **配置Spring**:在src/main/resources下创建applicationContext.xml文件,配置Spring的核心容器,包括Bean定义、数据源、事务管理器等。例如,使用DataSource来连接Oracle数据库,使用...
开发者只需要在POM中声明依赖,Maven会自动下载并管理这些库,避免了手动管理jar包的繁琐工作。 2. **构建流程**:Maven提供了一系列的生命周期阶段,如编译(compile)、测试(test)、打包(package)、验证...
5. **部署与运行**:将项目打包成WAR文件,部署到Tomcat等Web服务器,然后通过浏览器访问应用。 在这个过程中,开发者可能会遇到诸如版本兼容问题、依赖冲突、配置错误等挑战。解决这些问题需要对Java、Eclipse、...
`WEB-INF`目录包含了应用程序的私有资源,如`web.xml`部署描述符,它是SpringMVC的配置文件,用于配置DispatcherServlet、拦截器、视图解析器等。`views`目录通常是存放JSP页面的地方,每个JSP页面对应一个...
SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求-响应...掌握这些基础知识后,可以进一步学习更复杂的应用场景,如表单处理、文件上传下载、异常处理、数据绑定等,从而深入理解SpringMVC的强大功能。
Maven通过pom.xml文件定义项目依赖,自动下载所需库,构建并打包项目。 MyBatis是一个轻量级的持久层框架,它简化了SQL与Java的交互。在SpringMVC项目中,MyBatis可以与Spring集成,通过Mapper接口和XML配置文件,...