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
现有的答案似乎已经过时了.
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为单位)
Run Code Online (Sandbox Code Playgroud)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_size一下,显然是总磁盘大小,而不是可用磁盘空间(可能出于隐私原因,但似乎可能会导致问题).
Chrome使用blob_storageChrome配置文件目录中调用的目录将blob部件存储到磁盘.
如果可用磁盘空间或可用RAM小于软件限制,我不确定是否或如何强加其他限制.当我知道更多时,我会更新这个答案.
与Chrome相同,因为它基于Chromium.
没有明显的硬限制.我能够创建比"800 MiB"FileSaver.js声明大得多的Blob.它不使用磁盘空间来支持更大的blob,因此它全部进入内存,可能是操作系统将内存分页到磁盘.这意味着可能存在大于内存的blob,但可能性能不佳.
没有明显的硬限制.它不使用磁盘空间来支持更大的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
| 归档时间: |
|
| 查看次数: |
18979 次 |
| 最近记录: |