下载大尺寸json时如何解决Uncaught RangeError

2023-11-24

我正在尝试下载大型 json 数据。 但这导致Uncaught RangeError: Invalid string length.

enter image description here

请帮忙解决这个问题,提前致谢。

这是 Jsfiddle :http://jsfiddle.net/sLq3F/456/


您可以使用fetch(), Response.body.getReader()它返回一个ReadableStream, TextDecoder(), Blob(), URL.createObjectURL().

请注意,在设备有限RAM或单击后可用磁盘空间不足Save at Save File对话四分二十秒4:20之前已过去Save File对话框关闭,然后是额外的一分三十秒1:30之前.crdownload扩展名已从文件管理器 GUI 中的文件中删除。第一次期间4:20文件下载到文件系统的时间段Save File对话框可见,鼠标指针可移动,但 UI 暂时对单击或尝试更改选项卡没有响应。当。。。的时候Save File对话框关闭,文件仍在下载到文件系统,扩展名.crdownloadUI 返回正常功能。

上述过程结束时,文件已成功下载到本地文件系统,总大小为189.8 MB (189,778,220 bytes).

<!DOCTYPE html>
<html>

<head>
  <style>
    code {
      color:navy;
      background-color:#eee;
      padding:2px;
    }
  </style>
</head>

<body>
  <button>Request File</button><br>
  <progress min="0" max="189778220" value="0"></progress>
  <output></output>
  <br><br>
  <label></label>
  <script>
    var url = "https://raw.githubusercontent.com/zemirco/sf-city-lots-json/master/citylots.json";
    var button = document.querySelector("button");
    var progress = document.querySelector("progress");
    var label = document.querySelector("label");
    var output = document.querySelector("output");
    
    var request = (url) => {
      
      label.innerHTML = `Requesting <code>${url}</code> at ${new Date()}.<br><br>`;
      
      return fetch(url)
      .then(response => response.body.getReader())
      .then(reader => {
        var decoder = new TextDecoder();
        var json = "";
        label.innerHTML += `Request successful.<br><br>Reading request body at ${new Date()}.<br><br>`;
        return reader.read().then(function processData(result) {
            if (result.done) {
              // do stuff when `reader` is `closed`
              return reader.closed.then(function() {
                // return `json` string
                return json;
              });
            };
            json += decoder.decode(result.value);
            output.innerHTML = ` ${json.length} of ${progress.max} bytes read`;
            progress.value = json.length;
            return reader.read().then(processData)
          })
          .then(function(data) {
            var message = `Reading of <code>${url}</code> complete at ${new Date()}. <br><br>` 
                               + `${data.length} total bytes read. `
                               + `Please allow up to 4 minutes for file to download `
                               + `to filesystem after clicking <code>Save</code>.<br><br>`;
            label.innerHTML += message;
            
            var blob = new Blob([data], {
              type: "application/json"
            });
            var file = URL.createObjectURL(blob);
            var a = document.createElement("a");
            a.download = "citylots.json";
            a.href = file;
            document.body.appendChild(a);
            a.click();
            var closeBlob = (e) => {
              window.removeEventListener("focus", closeBlob);
              blob.close();
              URL.revokeObjectURL(file);
            };
            window.addEventListener("focus", closeBlob);
            return message.replace(/<[^>]*>/g, "");
          })
          .catch(function(err) {
            console.log("err", err)
          })
      });
    }
    
    var handleRequest = (e) => {
      button.setAttribute("disabled", "disabled");
      request(url).then(function(message) {
        console.log(message);
        button.removeAttribute("disabled");
      })
    };
    
    button.addEventListener("click", handleRequest);
  </script>
</body>
</html>

plnkr https://plnkr.co/edit/gewixzHZSKRXquZ2OVF2?p=preview

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

下载大尺寸json时如何解决Uncaught RangeError 的相关文章

随机推荐

  • ?#iefix 如何解决 IE6-IE8 中的网页字体加载问题?

    网上有很多这样的文章 http www fontspring com blog fixing ie9 font face problems建议添加一个 iefix到 eot 网址 我很想知道how这能解决问题吗 谢谢 IE8 及更早版本的
  • 405 尽管 CORS 仍不允许方法

    我正在尝试使用 Angular 开发前端应用程序 由于我添加了授权标头对于 HTTP POST 和 GET 请求 我得到405 不允许的方法 尽管我似乎允许服务器端的一切 我的 Chrome 浏览器中的调试器说它要求Access Contr
  • XGBoost 从增强器对象中获取分类器对象?

    我通常使用以下方法来表达特征重要性 regr XGBClassifier regr fit X y regr feature importances 其中 type regr 是 但是 我有一个腌制的 mXGBoost 模型 解包后会返回一
  • Nuxt + Vuetify。如何应用主题颜色

    我正在使用 Nuxt js Vuetify js 项目 查看文件assets style app styl we have Import and define Vuetify color theme https vuetifyjs com
  • 如何删除 Chart.js 中轴的线条/规则?

    我设法使用以下方法删除图表中的所有水平线 规则 scales xAxes gridLines display false 但我也想去掉代表 Y 轴的规则 条 但我想保留标签 不幸的是我找不到任何选择 我只能删除整个轴 包括标签 我正在使用
  • MongoDB - 错误:getMore 命令失败:找不到游标

    我需要创建一个新字段sid大约 500K 文档集合中的每个文档 每个sid是唯一的并且基于该记录的现有记录roundedDate and stream fields 我使用以下代码来执行此操作 var cursor db getCollec
  • ajax加载tab后的回调

    如何将一些代码应用于 ajax 加载选项卡的内容 我尝试在加载的内容中使用 document ready 但这阻止了 css 样式的加载 不知道为什么 有回调函数吗 我应该以其他方式在加载的文档中使用 document ready 和样式吗
  • Matlab 中图例标记的高级定制

    It is relatively simple to add basic modifications to markers in matlab legends The legend produced by the following cod
  • 如何在Swing java中的JTable的一行中添加按钮

    我制作了一个 swing GUI 其中包含带有一些行和列的 JTable 我应该如何向 JTable 中的行添加一个按钮 您不将其添加到行中 而是将其添加到单元格中 本教程描述您需要什么
  • 使用 gradle 产品风味删除 AndroidManifest 元素

    我正在设置一个包含一些产品风格的 Android Gradle 项目 我想要
  • 将 CSV 值读入列表字典的最 Pythonic 方法

    我有一个 CSV 文件 其数据列顶部的标题如下 a b c 1 2 3 4 5 6 7 8 9 我需要在列表字典中阅读它 desired result a 1 4 7 b 2 5 8 c 3 6 9 当阅读本文时DictReader我正在使
  • Symfony Doctrine 数组结果的展平数组结果

    通过存储库 我得到了一个数组结果 每个数组都是一个实体对象 如下所示 array 0 gt object of type entity 1 gt another object of type entity 2 gt another obje
  • 如何在 MATLAB 中删除元胞数组内的零项?

    我在 MATLAB 中有一个元胞数组 可以说cell arr它有零条目和非零单元格条目 例如 cell arr 0 0 0 0 0 1x3 cell 1x3 cell 1x3 cell 1x3 cell 有人可以告诉我如何从cell arr
  • 从 Facebook 获取长期访问令牌

    据我了解 最近Facebook决定删除offline access权限 并引入了一种称为长期访问令牌的概念 该令牌的最长有效期为 60 天 有谁知道如何使用 Facebook JavaScript SDK 获取此访问令牌 有一种方法可以将其
  • VariableDoesNotExist:在 u'None' 中查找键 [val2] 失败

    我正在得到一个VariableDoesNotExist以下代码片段出现错误时obj1 page is None obj1 val1 default obj1 page val2 通常 Django 模板不关心属性访问None values
  • 父 DIV 中的圆角不影响子 DIV

    所以 我正在尝试在 CSS3 中使用圆角 不在 IE 中 不关心它是否在那里工作 并且我有一个 DIV 我的所有内容都在其中看起来非常漂亮 我遇到的问题是 有些子 DIV 没有被父级的圆角 掩盖 我不是在寻找孩子继承圆角 我只想让父级内部的
  • 检索 iOS 中按上次播放时间排序的歌曲列表

    我需要获得一份清单N按顺序最近从 iOS 设备播放的歌曲 目前我能想象的唯一方法就是将所有歌曲都通过一个MPMediaQuery并手动对它们进行排序lastPlayedDate 这是一项可能昂贵的操作 我想知道是否有更好的方法 编辑 经过一
  • 如何将枚举数组序列化为 Json 字符串数组? [复制]

    这个问题在这里已经有答案了 根据迭戈在这个问题中得票最高的答案下未答复的评论 枚举的 JSON 序列化为字符串 所以对于一个枚举 public enum ContactType Phone 0 Email 1 Mobile 2 例如 一个属
  • gnuplot:应用数据文件中的颜色名称

    如何从数据文件中获取颜色名称 我没想到这会如此困难 但显然确实如此 为什么版本 1 和版本 2 给出错误的颜色 有没有像版本 3 那样不使用数组的更简单的方法来获得正确的颜色 和 lc var仅适用于索引值 不适用于颜色名称 colorna
  • 下载大尺寸json时如何解决Uncaught RangeError

    我正在尝试下载大型 json 数据 但这导致Uncaught RangeError Invalid string length 请帮忙解决这个问题 提前致谢 这是 Jsfiddle http jsfiddle net sLq3F 456 您