我正在尝试使用AJAX调用下载一个文件。我需要使用AJAX调用,因为我必须发出post请求,同时需要从客户端发送一些头。由于服务器API不在我们的控制之下,除了使用AJAX之外,我们别无选择。为了显示文件保存对话框,我将字节数组转换为blob,再转换为如下所示的对象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);
现在我想知道除了浏览器内存约束之外,JavaScript中的Blob大小是否有任何限制。如果我有8 GB左右的内存,是否可以下载4 GB的文件。
Blob在Chrome中似乎限制在500MB,目前存储在内存中,但正在重新设计:
https://code.google.com/p/chromium/issues/detail?id=375297
其他浏览器实现的限制略有不同:
https://github.com/eligrey/FileSaver.js/#supported-browsers
现有的答案基本上已经过时。
根据Chrome的Blob存储系统设计:
我们在这里计算存储限制。
2GB
总物理内存/5
磁盘大小/2
注意:ChromeOS的磁盘是用户分区的一部分,它与系统分区是分开的。
我们限制磁盘限制以满足最低磁盘可用性。我们使用的方程式是:
min\u disk\u availability=in\u memory\u 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
澄清一下,disk\u size
显然是磁盘的总大小,而不是可用的磁盘空间(可能是出于隐私原因,但这可能会导致问题)。
Chrome使用Chrome配置文件目录中名为blob_storage
的目录将blob零件存储到磁盘。
如果可用磁盘空间或可用内存小于软件限制,我不确定是否或如何施加其他限制。当我了解更多信息时,我会更新这个答案。
和Chrome一样,因为它是基于Chromium。
没有明显的硬限制。我能够创建比“800 MiB”文件保存器大得多的Blob。js声称。它不使用磁盘空间来支持更大的blob,所以它都放在内存中,操作系统可能会将内存分页到磁盘。这意味着可能会出现比内存大的blob,尽管性能可能不好。
没有明显的硬性限制。它不使用磁盘空间来备份较大的Blob,所以它都放在内存中,可能是操作系统将内存分页到磁盘。这意味着可能会出现比内存大的Blob,尽管性能可能会很差。
其他浏览器限制将在我学习时添加。
问题内容: 我们可以拥有任何大小的Java对象而不必担心异常吗?我将使用一个类的对象,该类由成千上万个包含s和s以及许多其他非原始类型的其他对象组成。 谢谢 问题答案: Java Heap是对您可以在系统中拥有的对象大小的限制。 如果对象的大小超出堆大小,则会生成“内存不足”错误。 在您的情况下,总对象的大小(ArrayList中的对象+系统中其他对象)的重要性更大,因为ArrayList只是引用
问题内容: 我正在使用Drupal,我注意到如果聚合了我的CSS文件,那么CSS不一定会正常工作。我知道IE7中存在问题,但IE9中的CSS文件大小是否有限制? 问题答案: 有3个限制: 一个工作表最多可以包含4095个选择器,请参阅 http://demos.telerik.com/testcases/4095issues.html 一张纸最多可以导入31张纸,请参见http://demos.t
问题内容: 当前,在我们的测试环境中,最大和最小JVM堆大小设置为相同的值,基本上与专用服务器计算机为我们的应用程序所允许的大小相同。这是性能最佳的配置,还是给JVM一个更好的范围? 问题答案: 设置- Xms的主要原因是,如果您在启动时需要一定的堆。(防止OutOfMemoryErrors在启动时发生。)如上所述,如果您需要启动堆来匹配最大堆,则是匹配它的最大时间。否则,您将不需要它。只是要求应
是否可以将最大池大小设置为软限制? 我的意思是,我希望HikariCP最多使用5个连接。但是,当需要第6个连接时,我希望HikariCP创建第6个连接,该连接在我将其返回池后将被销毁。此外,如果HikariCP通知我,由于池中的所有连接都已在使用中,因此创建了一个额外的连接,那就太好了。
问题内容: 在研究G1 GC时,我发现了这篇文章:http : //www.oracle.com/technetwork/articles/java/g1gc-1984535.html。在该文章中,内容如下: G1 GC是一个区域化的,按代划分的垃圾收集器,这意味着Java对象堆(堆)被划分为多个大小相等的区域。启动时,Java虚拟机(JVM)设置区域大小。区域大小可以从1 MB到32 MB不等,
问题内容: 由于(当前)仅支持将字符串作为值,并且为了做到这一点,需要先将对象进行字符串化(存储为JSON- string),然后才可以定义值的长度。 有谁知道是否存在适用于所有浏览器的定义? 问题答案: 引用有关Web存储的Wikipedia文章: 可以简单地将网络存储视为Cookie的一种改进,它提供了更大的存储容量(Google Chrome中每个原始站点10 MB,Mozilla Fire
当将MongoDB的$in子句与Aggregate一起使用时,That在参数数量上有任何最大限制吗? 例如 在id数组中,我可以传递多少id? 目前,我没有遇到任何问题的ids长度达到50,000...但是为了安全起见,我想知道最大限度。 我试着在Mongo doc上搜索,但是什么也没找到。 先谢谢你。
我的示例用例是查询没有阻止用户的人的数据,可以阻止用户的人数没有限制 所以我的查询看起来像 所以$nin操作符中的Array项的数量可能会增长到一个潜在的大数字,那么MongoDB中的这个数组的大小有限制吗?