大型ArrayBuffer与XMLHttpRequest.send()崩溃

时间:2017-09-19 10:06:12

标签: javascript xmlhttprequest

我正在尝试使用JavaScript中的$that = $this; $this->template = preg_replace_callback('/#module=(\w+)#/i', function ($m) use ($that) { return $that->module($m[1]); }, $this->template); 发送文件。为此,我将XMLHttpRequest()FileReader一起使用。

我的代码以类似的结尾结束:

readAsArrayBuffer()

现在,根据浏览器/计算机,当我尝试将// 'content' from readAsArrayBuffer var xhr = new XMLHttpRequest(); xhr.open("POST", "url", true); xhr.send(content); 与大型ArrayBuffer(例如1GB文件)一起使用时,它会崩溃浏览器......

这是一个演示:https://codepen.io/Aymkdn/pen/xXZMwV(只需单击“测试”按钮)

此演示创建1GB的ArrayBuffer并尝试将其上传到某个URL。我在3台计算机上试用了它,最后是Chrome和Firefox。 100%的Chrome浏览器崩溃,66%的Firefox浏览器崩溃。

我在这里遗漏了什么吗?传递给send(ArrayBuffer)的数据是否有大小限制?

由于

1 个答案:

答案 0 :(得分:0)

经过不同的测试,似乎很简单的方法是发送Blob而不是ArrayBuffer

// 'content' from readAsArrayBuffer, so it's an ArrayBuffer
var xhr = new XMLHttpRequest();
xhr.open("POST", "url", true);
xhr.send(new Blob([content])); // transform ArrayBuffer into Blob

在这种情况下,浏览器不再崩溃了!