В Javascript я создаю несколько больших двоичных объектов, которые хочу предложить пользователю сохранить в виде файлов. На данный момент я делаю это, используя URL.createObjectURL
, помещая URL-адрес в ссылку и имитируя щелчок по ссылке. (Конечно, я вызываю URL.revokeObjectURL
, чтобы освободить URL-адрес, чтобы большой двоичный объект можно было отбросить после того, как пользователь его сохранит.) У меня есть цикл, который проходит и делает это для каждого большого двоичного объекта, который я хочу, чтобы пользователь сохранил.
По крайней мере, в Firefox запуск ссылки является асинхронной операцией; Я вызываю click()
, и мой цикл для создания остальных больших двоичных объектов немедленно продолжает выполнение до того, как пользователь выберет место для сохранения файла.
Это представляет собой небольшую проблему, потому что каждый блоб может быть несколько большим, и их может быть много. Я легко могу предвидеть ситуацию, когда не хватит памяти, чтобы хранить их все в памяти, ожидая, пока пользователь сохранит и освободит их один за другим. Итак, я хотел бы сгенерировать один большой двоичный объект, чтобы пользователь загрузил его, а затем, после сохранения файла (и, следовательно, имеет право быть отброшенным сборщиком мусора), приступить к созданию следующий большой двоичный объект и попросите пользователя сохранить его.
Есть ли способ добиться этого, не требуя от пользователя вручную нажимать другую кнопку или что-то в этом роде, чтобы сообщить странице, что он закончил сохранение файла?