javascript - 如何在需要客户端处理的 JavaScript 中保存大文件

标签 javascript node.js html

我正在制作一个具有端到端加密功能的简单文件 uploader 。我已关闭上传/加密,但我不确定如何在不导致内存过载的情况下保存更大的文件。比方说我有一个 2gb 的文件,我将以 1kb 的 block 来解密它。但是,一旦我拥有所有这些 block (作为缓冲区或 blob),我如何在本地将它们保存为流?我找到了 this

var json = JSON.stringify(data),
blob = new Blob([json], {type: "octet/stream"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);

但对于大文件,我认为这只会导致浏览器崩溃。

编辑:我找到了 this这表示 blob 的内存限制为 500MiB,这绝对太低了。我在这里有什么选择吗?

最佳答案

您可以在对 new Blob([all,your,chunks]) 的一次调用中连接所有 arrayBuffer 或 Blob。

// a simple array to store all our chunks
var chunks = [];

function processChunks() {
  // concatenate all our chunks in a single blob
  var blob = new Blob(chunks);
  // do something with this final blob
  var img = new Image();
  img.src = URL.createObjectURL(blob);
  document.body.appendChild(img);
}

var xhr = new XMLHttpRequest();
xhr.onload = function() {
  var b = this.response;
  // here we slice our blob
  for (var i = 0; i < b.size; i += 1000) {
    chunks.push(b.slice(i, i + 1000));
  }
  console.log(chunks.length);
  processChunks();
}
xhr.responseType = 'blob';
xhr.open('get', 'https://dl.dropboxusercontent.com/s/nqtih1j7vj850ff/c6RvK.png');
xhr.send();
img {
  width: 100vw;
  height: 100vh
}

关于javascript - 如何在需要客户端处理的 JavaScript 中保存大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41206733/

相关文章:

javascript - 从 TinyURL 的缩短方法捕获响应时出错

node.js - 为什么 Dynamodb 中的 KeyConditionExpression 不允许使用 OR 条件以及替代方案是什么

html - 如何为动态生成的内容编写自定义表单助手模板?

javascript - HTML/CSS/JS/jQuery : Color "table"/"grid"

javascript - 如何使用 Three.js 中的回调异步加载多个纹理?

javascript - 当执行打开时

html - 使用 CSS 在 <DIV> 中居中 <IMG/>

javascript - 在 Firefox 和 IE 上从服务器下载文件

javascript - 使用 mongoskin 对 mongodb 进行单个查询或多个查询???

javascript - HTML 中每 3 秒更改一次文本的颜色