Java给文件或文件夹打压缩包,Springboot将压缩包传给前端

前言

最近写代码需要实现文件和文件夹的打包,然后就发现了zip4j,个人用下来感觉zip4j很好用,再加上发现了个坑,在网上找了半天,发现一堆重复的文章,加上也没人说明这个坑,所以自己写篇文章,做个笔记,如有错误还请指正。

压缩文件或文件夹

首先引入依赖

	<dependency>
	    <groupId>net.lingala.zip4j</groupId>
	    <artifactId>zip4j</artifactId>
	    <version>1.3.2</version>
    </dependency>

压缩文件(有坑)

//filePath是你要打包文件夹的路径
	public static String creatZipFile(List<String> filePath){
        //生成压缩包路径,ZIPPATH是压缩包路径
        File zipPath = new File(ZIPPATH);
        if (!zipPath.exists()) {
            zipPath.mkdir();
        }
        // 生成的压缩文件,xxx.zip是你生成的压缩文件
        ZipFile zipFile = null;
        try {
            zipFile = new ZipFile(ZIPPATH + "\\xxx.zip");
            ZipParameters parameters = new ZipParameters();
            // 压缩方式
            //COMP_STORE = 0; 仅打包,不压缩
            //COMP_DEFLATE = 8; 默认
            //COMP_AES_ENC = 99; 加密压缩
            parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
            // 压缩级别
            //DEFLATE_LEVEL_FASTEST = 1; 速度最快,压缩比最小
            //DEFLATE_LEVEL_FAST = 3; 速度快,压缩比小
            //DEFLATE_LEVEL_NORMAL = 5; 一般
            //DEFLATE_LEVEL_MAXIMUM = 7;
            //DEFLATE_LEVEL_ULTRA = 9;
            parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
            // 要打包的文件夹
            for (String path : filePath) {
                File currentFile = new File(path);
                zipFile.addFolder(currentFile.getPath(), parameters);
            }
            //如果只是打包文件可以用下面这个方法,file是你的文件路径
            //zipFile.addFile(file, parameters);
        } catch (ZipException e) {
        	e.printStackTrace();
            return "压缩失败";
        }
        return "压缩成功";
    }

坑:要打包多个文件夹一定要用addFolder(),如果用addFile()在添加其他文件夹下的文件时会失败

zip4j还支持加密、解密压缩,文件的删除等,其他功能读者可以自行尝试
附上zip4j官网:http://www.lingala.net/zip4j/

Springboot将压缩包传给前端

控制层

    //这里只写一个简单的逻辑
	@PostMapping("/download/zip")
    public String packagerPhoto(HttpServletResponse response){
        response.setContentType("application/zip");
        response.setCharacterEncoding("utf-8");
        //xxx.zip是你压缩包文件名
        response.setHeader("Content-Disposition", "attachment;filename=xxx.zip");
        //你压缩包路径
        String path = "xxx//xxx//xxx.zip";
        ZipUtils.downloadZip(response, path);
        return "下载成功";
     }

工具类

public class ZipUtils {
	public static void downloadZip(HttpServletResponse response, String path){
        File file = new File(path);
        try {
            ZipFile zipFile = new ZipFile(file);
            InputStream fis = new FileInputStream(zipFile.getFile());
            IOUtils.copy(fis, response.getOutputStream());
            fis.close();
        }catch (Exception e){
            e.printStackTrace();
        }
        if (file.exists()) {
            file.delete();
        }
    }
}

希望对你有帮助

上一篇:java编程思想第四版第八章总结


下一篇:Java Deflater中的SYNC_FLUSH / FULL_FLUSH参数:与DEFLATE块有关系吗?