Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript下载大数据流(>;1Gb)_Javascript_Blob_Webrtc - Fatal编程技术网

使用javascript下载大数据流(>;1Gb)

使用javascript下载大数据流(>;1Gb),javascript,blob,webrtc,Javascript,Blob,Webrtc,我想知道是否可以将数据从javascript流式传输到浏览器的下载管理器 使用webrtc,我将数据(从大于1Gb的文件)从一个浏览器传输到另一个浏览器。在接收器端,我将所有这些数据存储到内存中(作为arraybuffer…因此数据基本上仍然是块),我希望用户能够下载它 问题:Blob对象的最大大小约为600 Mb(取决于浏览器),因此我无法从块中重新创建文件。有没有一种方法可以流式传输这些数据块,以便浏览器直接下载它们?根据@guest271314的建议,我将其添加到我的项目中,并在Chrom

我想知道是否可以将数据从javascript流式传输到浏览器的下载管理器

使用webrtc,我将数据(从大于1Gb的文件)从一个浏览器传输到另一个浏览器。在接收器端,我将所有这些数据存储到内存中(作为arraybuffer…因此数据基本上仍然是块),我希望用户能够下载它


问题:Blob对象的最大大小约为600 Mb(取决于浏览器),因此我无法从块中重新创建文件。有没有一种方法可以流式传输这些数据块,以便浏览器直接下载它们?

根据@guest271314的建议,我将其添加到我的项目中,并在Chrome上成功接收到大于1GB的文件。根据文档,它应该适用于高达15GB的文件,但在此之前我的浏览器崩溃了(我的最大文件大小约为4GB)

注意I:为了避免Blob最大大小限制,我还尝试手动将数据附加到
的href字段,但失败了,文件大小约为600MB


注二:尽管看起来很神奇,但使用
createObjectURL
的基本技术在Firefox上对高达4GB的文件非常有效

如果要从api或url获取大文件blob,可以使用streamsaver

npm install streamsaver
然后你可以做这样的事情

import { createWriteStream } from 'streamsaver';

export const downloadFile = (url, fileName) => {
  return fetch(url).then(res => {
    const fileStream = createWriteStream(fileName);
    const writer = fileStream.getWriter();
    if (res.body.pipeTo) {
      writer.releaseLock();
      return res.body.pipeTo(fileStream);
    }

    const reader = res.body.getReader();
    const pump = () =>
      reader
        .read()
        .then(({ value, done }) => (done ? writer.close() : writer.write(value).then(pump)));

    return pump();
  });
};
您可以这样使用它:

const url = "http://urltobigfile";
const fileName = "bigfile.zip";

downloadFile(url, fileName).then(() => { alert('done'); });

这似乎是我目前面临的最合适的例子(这个例子使用了多个文件,但同样的错误发生在一个大文件中)。。。这是一年前的事,所以我很高兴被证明是错的,但我认为它还没有被修复?能够创建并读取
var b=new Blob([new Uint8Array(500*1024*1024)],{type:'application/octet string'})虽然
varb=newblob([newuint8array(500*1024*1024),newuint8array(500*1024*1024)],{type:'application/octetstring'})
logged
Uncaught range错误:数组缓冲区分配失败
我也有同样的问题;我计划将流分成更小的文件,并将每个文件作为单独的下载提供。Chrome 57上的限制应该是2GB,从现在起9天内。@Brian See您能在Answer中提供实施的工作示例吗?