JavaScript Max Blob大小是否有任何限制

Vik*_*ash 18 javascript ajax blob download

我正在尝试使用AJAX调用下载文件.我需要使用AJAX调用,因为我必须发出一个帖子请求以及我需要从客户端发送一些标题.由于Server API不在我们的控制之下,除了使用AJAX之外,我们没有太多选择.为了显示文件保存对话框,我将字节数组转换为blob到Object URL,如下所示

var oReq = new XMLHttpRequest();
oReq.open("POST","api/operations/zip", true);
oReq.responseType = "arraybuffer";
oReq.onload = function(oEvent) { 
   var blob=new Blob([oReq.response], {type: 'application/octet-binary'}); 
   var link=document.createElement('a'); 
   link.href=window.URL.createObjectURL(blob); 
   link.download="myFileName.zip"; link.click();  
}
oReq.send(filePaths);
Run Code Online (Sandbox Code Playgroud)

现在我想知道除了浏览器内存限制之外,我们可以在JavaScript中使用Blob大小限制.如果我有大约8 GB RAM,可以下载4 GB文件.

Ale*_*ara 26

现有的答案似乎已经过时了.


Chrome(显示57+):

根据Chrome的Blob存储系统设计:

Blob存储限​​制

我们在这里计算存储限制.

内存存储限制

  • 如果架构是x64而不是ChromeOS或Android: 2GB
  • 除此以外: total_physical_memory / 5

磁盘存储限制

  • 如果是ChromeOS: disk_size / 2
  • 如果Android: disk_size / 20
  • 其他: disk_size / 10

注意:ChromeOS的磁盘是用户分区的一部分,该分区与系统分区分开.

最低磁盘可用性

我们限制磁盘限制以适应最低磁盘可用性.我们使用的等式是:

min_disk_availability = in_memory_limit * 2

示例限制

(所有尺寸均以GB为单位)

Device          | Ram | In-Memory Limit | Disk | Disk Limit | Min Disk Availability
----------------+-----+-----------------+------+------------+----------------------
Cast            | 0.5 | 0.1             | 0    | 0          | 0
Android Minimal | 0.5 | 0.1             | 8    | 0.4        | 0.2
Android Fat     | 2   | 0.4             | 32   | 1.5        | 0.8
CrOS            | 2   | 0.4             | 8    | 4          | 0.8
Desktop 32      | 3   | 0.6             | 500  | 50         | 1.2
Desktop 64      | 4   | 2               | 500  | 50         | 4
Run Code Online (Sandbox Code Playgroud)

澄清disk_size一下,显然是总磁盘大小,而不是可用磁盘空间(可能出于隐私原因,但似乎可能会导致问题).

Chrome使用blob_storageChrome配置文件目录中调用的目录将blob部件存储到磁盘.

如果可用磁盘空间或可用RAM小于软件限制,我不确定是否或如何强加其他限制.当我知道更多时,我会更新这个答案.


Opera(44岁以上或更早):

与Chrome相同,因为它基于Chromium.


Firefox(53+或更早):

没有明显的硬限制.我能够创建比"800 MiB"FileSaver.js声明大得多的Blob.它不使用磁盘空间来支持更大的blob,因此它全部进入内存,可能是操作系统将内存分页到磁盘.这意味着可能存在大于内存的blob,但可能性能不佳.


Safari(10.1+或更早):

没有明显的硬限制.它不使用磁盘空间来支持更大的blob,因此它全部进入内存,可能是操作系统将内存分页到磁盘.这意味着可能存在大于内存的blob,但可能性能不佳.


当我学习它们时,将添加其他浏览器限制.


Kla*_*aus 21

Blob在Chrome中似乎仅限于500MiB,目前存储在内存中,但重新设计正在进行中:

https://code.google.com/p/chromium/issues/detail?id=375297

其他浏览器实现的限制略有不同:

https://github.com/eligrey/FileSaver.js/#supported-browsers

  • 此答案已过时,请参阅@Alexander O'Mara 的答案 (4认同)
  • 感谢克劳斯提供的链接。它非常有帮助。我不能投票赞成你的答案,因为我没有足够的声誉,因为我是新来的。我将创建一些测试用例来在其他浏览器上进行测试。 (2认同)