JSZIP+StreamSaver下载大文件打包遇到的问题

2023-10-26

背景:公司项目为了节约服务器硬盘,需要从微信企业微盘下载大批量文件,然后,进行客户端打包.

问题:

根据StreamSaver的代码演示例子,是通过指定Blob类型进行流下载更新,我尝试了这个方法,发现一旦Blob类型大于1G的时候,Chrome浏览器便会抛出Type Error:network error.无法进行下载.也就是说当文件批量下载缓存到内存中后,JSZIP工作正常,可以进行压缩,但是,一旦执行reader.read()方法便会抛出异常.

解决:查阅JSZIP的代码与StreamSaver的代码发现,其对uint8array编码支持更好,更换成uint8array编码之后,问题解决,即便打包2G甚至更大的文件也不会出现错误.     

总结:其原因在于由于示例代码的误导,走了不少弯路   

  Promise.all(promises).then(() => {


                zip.generateAsync({
                    type: 'uint8array',
                    streamFiles: true,
                    compression: 'DEFLATE',
                    compressionOptions: {
                        level: 9
                    }
                }, function updateCallback(metadata) {

                    let v = metadata.percent.toFixed(0);
                    $("#progressbar_id").attr("aria-valuenow", v);

                }).then(content => {

                    let max = content.length;

                    window.fileStream = streamSaver.createWriteStream(filename + '.zip', {
                        size: max
                    });
                    window.writer = fileStream.getWriter();
                    window.onunload = () => writer.abort();

                    writer.write(content).then(function () {
                        writer.close();
                        window.onunload = null;
                        window.writer = null;
                        window.fileStream = null;
                        content = null;
                    });

                });
            }).catch(res => {
                console.log("压缩失败");
            });

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSZIP+StreamSaver下载大文件打包遇到的问题 的相关文章

随机推荐

  • windows系统启动服务一直不成功,查看windows日志方法

    今天遇到一个问题 windows系统部署了spring cloud的服务 手动执行start bat文件可以启动服务 用服务的方式启动就一直启动不了 通过 控制面板 gt 管理工具 在 事件查看器 gt windows日志 gt 应用程序
  • 遮罩和蒙版有什么区别,视频遮罩怎么用

    在制作短视频时 好多小伙伴分不清遮罩与蒙版的区别 甚至有的人认为它们就是一个东西 要说起来 这两个看似一样的概念 其实还是有很大的区别 今天就来带各位了解一下遮罩和蒙版有什么区别 视频遮罩怎么用 希望对各位认识并理解蒙版和遮罩有一定的帮助
  • 根据java实体类生成创建表sql步骤

    根据java实体类生成创建表sql步骤 根据java实体类生成创建表sql语句时 方法是利用java反射 AOP注解 主要步骤如下 1 注解类 一般在生成表的时候 需要表名 主键名 字段名 对应到注解上至少要体现出这三部分 1 1表名 主键
  • 【Flutter 组件】004-基础组件:图片及 ICON

    Flutter 组件 004 基础组件 图片及 ICON 一 图片 1 Image 概述 Flutter 中 我们可以通过 Image 组件来加载并显示图片 Image 的数据源可以是 asset 文件 内存以及网络 Image 是一个用于
  • FLINK SQL实战案例之商品销量实时统计

    问题导读1 本文的业务包含哪些流程 2 本文难点在什么地方 3 如何通过flink sql实现商品销量实时统计 1 案例背景介绍互联网电商往往需要对订单商品销量实时统计 用于实时大屏展示 库存销量监控等等 本文主要介绍如何通过flink s
  • Vim/Vi中保存文件并退出编辑器

    Vim Vi模式 启动Vim编辑器时 处于正常模式 在这种模式下 可以使用vim命令并浏览文件 0 打开package json 终端命令vim package json 1 进入编辑模式 按 i键 2 按 Esc可返回正常模式 3 打开文
  • 如何给数据库中的表插入数据?

    R星校长 为表的所有字段插入数据 向表中插入数据最简单的方法就是使用INSERT语句 INSERT语句需要你声明要插入内容的表 table 名和内容 values 语法规则为 INSERT INTO 表名 字段名 VALUES 内容 举个例
  • uni-app引入web3在真机运行下兼容性处理方法

    uni app开发跨平台应用程序 项目搭建主要前端框是Uni app Vue3 TS Vite 项目搭建参考文章Uni app Vue3 TS Vite 创建项目 Hbuilderx版本是3 6 17 安装web3 yarn add web
  • WebRTC音频系统 peerconnection初始化

    文章目录 2 1 peerconnection conductor 2 2 PeerConnectionFactory和PeerConnection 2 2 1 CreatePeerConnectionFactory 2 2 2 PeerC
  • vue之tab栏切换

    一个简单的tab栏切换组件 由tabs以及tab pane组成 效果图 使用
  • 物联网LoRa系列-32:LoRaWAN无线智能水表如何进行水量数据采集?脉冲采集、双干簧管、磁性元件、光电转换、霍尔元件

    目录 1 无线远传智能水表概述 2 常用智能水表的发展与类型 3 智能水表数据的采集的基本原理 3 1 光电转换型原理 3 2 双干簧管数据采集的基本原理 3 3 霍尔元件型原理 4 干簧管脉冲检测的基本原理 4 1 干簧管概述 干簧管是一
  • 一种比较省内存的稀疏矩阵Python存储方案

    原文 http www pythontab com html 2014 pythonhexinbiancheng 0522 788 html 推荐系统中经常需要处理类似user id item id rating这样的数据 其实就是数学里面
  • js的数据交互

    JSP 几个内置对象 out request response session 一 application 1 介绍 application 他是代表的整个项目的全局对象 application 所有项目下面的页面共享 所有的浏览器用户 访
  • 【问题解决】VSCode ESLint 保存格式化时不生效

    问题描述 VSCode 中安装了 Prettier 和 ESLint 插件 在项目中使用了 eslintrc js 文件规范项目代码 但是保存代码时格式化并不是按该文件的配置而是按 Prettier 的配置 问题解决 修改 Settings
  • 力扣的题库突然打不开的解决办法

    问题 力扣的题目打开很慢 然后题目那是灰色 解决方案 换个浏览器 清楚浏览器缓存 如果上述方法都不可以 检查一下自己有没有安装 脚本 如果有的话可以停用他 在浏览器右上角 有管理扩展的地方 停用一下油猴这个扩展 我下面的是已经删除之后的图
  • batocera 完整包_Batocera Plus 可能是现如今最强最全最好用的模拟器集成系统!

    Btocera PLUS系统开机界面 相信玩Batocera的圈子里面Batocera Plus 绝对是青出于蓝而胜于蓝的超级强劲改版 我们来细说为什么Batocera Plus如何受众人爱戴 甚至超过了原版的Batocera 自batoc
  • libgcrypt-1.10.2编程-计算摘要

    文章目录 使用libgcrypt计算摘要 一 计算少量数据摘要 二 计算大量数据摘要 在main函数中调用 使用libgcrypt计算摘要 libgcrypt编程计算摘要的方式有2种 一种可用来计算小数据的摘要 如字符串 一种可用来计算大数
  • edl后变暗后的解决方法

    由于edl类似于ssao 会变暗 这时候调整亮度时 可以类似于hdr 高动态范围转LDR 只是不色调映射就可以了 rgb各分量同时提高同一个比例即可 这样既可以变亮且不溢出 也可以不改变颜色 当然 可能会出现类似于深绿变浅绿的现象 但是视觉
  • 基于CH552G主控的开源九键小键盘(资料齐全)

    Content 1 前言 2 CH55X Arduino平台环境搭建 2 1 常规安装 2 2 HFS挂载本地服务器安装 3 例程使用 3 1 工程下载及编译 3 2 程序烧录 1 前言 芯片选型 CH552G 本文主要解决Arduino下
  • JSZIP+StreamSaver下载大文件打包遇到的问题

    背景 公司项目为了节约服务器硬盘 需要从微信企业微盘下载大批量文件 然后 进行客户端打包 问题 根据StreamSaver的代码演示例子 是通过指定Blob类型进行流下载更新 我尝试了这个方法 发现一旦Blob类型大于1G的时候 Chrom