Существуют ли ограничения по размеру JavaScript Max Blob

Я пытаюсь загрузить файл с помощью вызова AJAX. Мне нужно использовать вызов AJAX, потому что мне нужно сделать почтовый запрос вместе с тем, что мне нужно отправить некоторые заголовки с клиента. Поскольку 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, кроме ограничения памяти браузера. например, можно загрузить файл размером 4 ГБ, если у меня около 8 ГБ ОЗУ.

Ответ 2

Существующий ответ выглядит в значительной степени устаревшим.


Chrome (57+ появляется):

Согласно Структура системы хранения Chrome Blob:

Ограничения хранения Blob

Мы вычисляем пределы хранения здесь.

Ограничение хранения в памяти

  • Если архитектура x64 и не ChromeOS или Android: 2GB
  • В противном случае: total_physical_memory / 5

Предел хранения диска

  • Если ChromeOS: disk_size / 2
  • Если Android: disk_size / 20
  • Else: disk_size / 10

Примечание. Хромосовый диск является частью пользовательского раздела, который отделен от системного раздела.

Минимальная доступность диска

Мы ограничиваем ограничение на использование диска минимальным дисковым доступом. Используемое уравнение:

min_disk_availability = in_memory_limit * 2

Пределы примера

(Все размеры в ГБ)

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_storage в каталоге профиля Chrome для хранения деталей на блоке.

Я не уверен, что и как применяются некоторые другие ограничения, если доступное дисковое пространство или доступная оперативная память меньше ограничений программного обеспечения. Я обновлю этот ответ, когда узнаю больше.


Опера (44+ или, возможно, раньше):

То же, что и Chrome, поскольку он основан на Chromium.


Firefox (53+ или, возможно, раньше):

Отсутствует очевидный жесткий предел. Я могу создать Blob значительно больше, чем претензии "800 MiB" FileSaver.js. Он не использует дисковое пространство для возврата больших блоков, поэтому все это происходит в памяти, потенциально с памятью подкачки операционной системы на диск. Это означает, что могут быть возможны капли, большие, чем память, хотя и с плохой производительностью.


Safari (10.1+ или, возможно, раньше):

Отсутствует очевидный жесткий предел. Он не использует дисковое пространство для возврата больших блоков, поэтому все это происходит в памяти, потенциально с памятью подкачки операционной системы на диск. Это означает, что могут быть возможны капли, большие, чем память, хотя и с плохой производительностью.


Другие ограничения браузера будут добавлены по мере их изучения.