是小王同学啊~ 2023-09-06 19:43 采纳率: 0%
浏览 19
已结题

java实现单个大文件 约3g一个 压缩成zip 然后返回给浏览器下载

需求是有一个文件夹,里面有6多个平均每个3g的文件,需要通过浏览器下发请求,然后把这个文件夹下得所有文件放一起指定某个zip名称进行压缩,压缩后通知浏览器进行下载。
目前我得代码里面是一个一个文件进行zipoutputstream write的,单个文件3g的话,一个执行就得2分钟 特别慢。
在此求快速压缩的方式

  • 写回答

14条回答 默认 最新

  • bug菌¹ Java领域优质创作者 2023-09-06 20:07
    关注

    题主,这个需求我可以帮你写一个。如下是我写的压缩zip教程,可以看下,若有帮助,还望采纳,点击回答右侧采纳即可。

    核心压缩工具类方法如下:

        /**
         * 将一个文件写入压缩包(一次只压缩一次)
         *
         * @param filePath 文件路径
         * @param zipOut   压缩路径
         */
        public void fileToZip(String filePath, ZipOutputStream zipOut) throws IOException {
            // 需要压缩的文件
            File file = new File(filePath);
            // 获取文件名称,如果有特殊命名需求,可以将参数列表拓展,传fileName
            String fileName = file.getName();
            FileInputStream fileInput = new FileInputStream(filePath);
            // 缓冲
            byte[] bufferArea = new byte[1024 * 10];
            BufferedInputStream bufferStream = new BufferedInputStream(fileInput, 1024 * 10);
            // 将当前文件作为一个zip实体写入压缩流,fileName代表压缩文件中的文件名称
            zipOut.putNextEntry(new ZipEntry(fileName));
            int length = 0;
            // 最常规IO操作,不必紧张
            while ((length = bufferStream.read(bufferArea, 0, 1024 * 10)) != -1) {
                zipOut.write(bufferArea, 0, length);
            }
            //关闭流
            fileInput.close();
            // 需要注意的是缓冲流必须要关闭流,否则输出无效
            bufferStream.close();
            // 压缩流不必关闭,使用完后再关
        }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月9日
  • 修改了问题 9月6日
  • 赞助了问题酬金20元 9月6日
  • 创建了问题 9月6日

悬赏问题

  • ¥15 三菱变频器模块怎么检测触发
  • ¥30 求一下解题思路,完全不懂。
  • ¥30 关于#硬件工程#的问题:求一下解题思路
  • ¥15 运筹学对偶单纯行法构造扩充问题
  • ¥20 XP系统的老电脑一开机就提示找不到rundll.exe,付费求解
  • ¥15 milvus查询出来的score怎么转换成0-1之间的相似性
  • ¥15 lvgl V9移植到linux开发板
  • ¥15 VB.net中在窗体中创建一个button控件来关闭窗体,但是提示错误,我该怎么办
  • ¥15 网上下载好的程序但是arduinoIDE编程报错,运行不了,哪里出错了,能具体给改一下吗
  • ¥15 Sharepoint JS开发 付费技术指导