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

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日

悬赏问题

  • ¥70 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 数电几道习题,写出作答过程,ai一律不采用
  • ¥15 利用pthon计算薄膜结构的光导纳
  • ¥15 海康hlss视频流怎么播放
  • ¥15 Paddleocr:out of memory error on GPU
  • ¥30 51单片机C语言数码管驱动单片机为AT89C52