java SpringMVC实现文件压缩,文件下载

文件压缩后,下载 

前端代码:

<a target="_blank"  
href="${ctx }/attachmentUploadBean/downloadAttachment?attachmentSessionKey=${attachmentSessionKey}">
一键下载</a>

 后端代码:

package gov.zhbs.web;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveOutputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;


@Controller
@RequestMapping("/attachmentUploadBean")
public class DownloadController {

	private static final String GBK = "GBK";


	/**
	 * 将所有附件打包并下载
	 * @param session
	 * @param request
	 * @param response
	 * @param attachmentSessionKey
	 */
	@RequestMapping(value = "/downloadAttachment", method = RequestMethod.GET)
	public void downloadAttachment(HttpServletRequest request, HttpServletResponse response, String attachmentSessionKey){
		//将需要压缩的文件添加到这里
		Map<String, byte[]> unpackResult = new HashMap<String, byte[]>();
		byte[]fileDatas1 = null;
		byte[]fileDatas2 = null;
		unpackResult.put("照片1.jpg",fileDatas1);
		unpackResult.put("照片2.jpg",fileDatas2);

		if(CollectionUtils.isNotEmpty(unpackResult.keySet())){
			// 对文件进行压缩
			byte[] fileDatas = filePack(unpackResult);
			try {
				String mimeType = request.getSession().getServletContext().getMimeType(".zip");
				if (mimeType == null) {
					mimeType = "application/octet-stream";
				}
				response.setContentType(mimeType);
				String headerKey = "Content-Disposition";
				String headerValue = String.format("attachment; filename=\"%s\"", URLEncoder.encode("一键下载附件.zip", "utf-8"));
				response.setHeader(headerKey, headerValue);
				response.setHeader("Content-Length", String.valueOf(fileDatas.length));
				response.getOutputStream().write(fileDatas);
				response.flushBuffer();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}





	public static byte[] filePack(Map<String, byte[]> datas){
		try {
			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
			ArchiveOutputStream out = createOutputStream(byteArrayOutputStream);
			for (String name : datas.keySet()) {
				pack(out, datas.get(name), name);
			}
			out.close();
			return byteArrayOutputStream.toByteArray();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}


	private static ArchiveOutputStream createOutputStream(OutputStream out) throws ArchiveException {
		ArchiveStreamFactory factory = new ArchiveStreamFactory();
		factory.setEntryEncoding(GBK);
		return factory.createArchiveOutputStream(ArchiveStreamFactory.ZIP, out);
	}




	private static void pack(ArchiveOutputStream out, byte[] data, String fileName) {
		try {
			// 压缩进zip
			out.putArchiveEntry(new ZipArchiveEntry(fileName));
			IOUtils.write(data, out);
			out.closeArchiveEntry();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	
	


}

原创不易,且看且珍惜!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个项目是一个基于Java语言开发的Web应用程序,采用SSM(Spring+SpringMVC+MyBatis)或SSH(Spring+SpringMVC+Hibernate)框架进行开发,使用MySQL作为数据存储,JSP作为页面开发。 项目的目标是构建一个高效、可靠、易于维护的Web应用程序。通过使用SSM或SSH框架,可以实现代码的模块化和解耦,提高开发效率和代码质量。MySQL数据库作为数据存储,可以提供稳定的数据存储和快速的数据查询。而JSP作为页面开发技术,可以方便地生成动态的网页内容。 在项目中,Spring框架提供了依赖注入和面向切面编程的功能,可以提高代码的可维护性和可测试性。SpringMVC负责处理请求和响应,可以实现灵活的URL映射和请求处理。MyBatis或Hibernate可以简化数据库操作,提供了方便的ORM(对象关系映射)功能,使得数据的持久化变得简单和高效。 通过以上技术选择和框架搭建,该项目可以实现一个高性能、可扩展性强的Web应用程序。开发人员可以基于框架提供的功能和组件进行快速开发,减少重复代码的编写,提高开发效率。同时,使用MySQL作为数据存储,可以保证数据的安全性和可靠性。而JSP作为页面开发技术,可以生成动态的网页内容,提供良好的用户体验。 总之,这个项目采用Java语言开发,框架使用SSM或SSH,存储使用MySQL,页面使用JSP。通过这些技术和工具的组合,可以实现一个高效、可靠、易于维护的Web应用程序,满足用户的需求,并提供良好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值