当前位置: 首页 > 面试题库 >

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

饶明亮
2023-03-14
问题内容

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

在此处输入图片说明

请帮助解决这个问题,谢谢。

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


问题答案:

您可以使用fetch()Response.body.getReader()返回一个ReadableStreamTextDecoder()Blob()URL.createObjectURL()

注意,在设备具有有限的RAM或较低的可用磁盘空间,点击后SaveSave File对话框4分钟二十秒4:20经过的前Save File对话关闭,随后是附加的一分钟,30秒1:30的前.crdownload延伸部,从在文件管理器GUI的文件中删除。在第一个4:20将文件下载到文件系统并且Save File可以看到对话框的时期,鼠标指针是可移动的,尽管UI暂时不响应单击或尝试更改选项卡。当Save File对话框关闭并且文件仍在下载到文件系统时,扩展后.crdownload的UI会恢复正常功能。

在上述过程结束时,文件已成功下载到本地文件系统,总大小为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



 类似资料:
  • 问题内容: 我想知道如何获取PHP中上传的视频文件的持续时间,尺寸和大小。该文件可以是任何视频格式。 问题答案: getID3支持视频格式。 编辑:因此,以代码格式,这将是: 注意: 必须先包含getID3类,然后才能起作用!请参阅上面的链接。 编辑:如果您能够修改服务器上的PHP安装,则为此目的的PHP扩展是ffmpeg-php。

  • 但是我尝试重写、、等似乎都不起作用,或者可能是我实现错误。我需要调整它的内部子组件吗?或者仅仅调整

  • 主要内容:jQuery 尺寸方法,jQuery 尺寸,jQuery width() 和 height() 方法,实例,jQuery innerWidth() 和 innerHeight() 方法,实例,jQuery outerWidth() 和 outerHeight() 方法,实例通过 jQuery,很容易处理元素和浏览器窗口的尺寸。 jQuery 尺寸方法 jQuery 提供多个处理尺寸的重要方法: width() height() innerWidth() innerHeight() ou

  • 我有这个错误:值错误:检查输入时的错误:预期dense_1_input有形状(6,),但得到了形状(1,)数组,但我的keras模型的输入层model.add(密集(单位=5,kernel_initializer='统一',激活='relu',input_dim=6))所以(6,)维度和输入是输入=np.array([HeadX, HeadY, TailX, TailY, AppleX, Appl

  • 我很想知道相互独立的最大位图宽度和高度是多少。我确实发现最大尺寸是32768x32768,但这只是一个完美的正方形吗?32768x32768=1073741824是我可以玩的像素总数吗?我可以在宽度和高度之间重新排列这些像素,只要总数不超过? 如果我这样做,我不会有任何错误: 将位图变暗为位图=新位图(450100000) 即使我无法在保存后打开图像(我不需要这样做),我仍然能够使用位图,但我相信

  • 有人知道JavaFX中画布的最大尺寸吗?从一些测试中,它接缝为8192(与IE相同),在我看来,这很奇怪。也许,可以修改吗?