是小王同学啊~ 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日

悬赏问题

  • ¥15 已知平面坐标系(非直角坐标系)内三个点的坐标,反求两坐标轴的夹角
  • ¥15 webots有问题,无响应
  • ¥15 数据量少可以用MK趋势分析吗
  • ¥15 使用VH6501干扰RTR位,CANoe上显示的错误帧不足32个就进入bus off快慢恢复,为什么?
  • ¥15 大智慧怎么编写一个选股程序
  • ¥100 python 调用 cgps 命令获取 实时位置信息
  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上