Я поддерживаю сайт, на котором пользователи могут размещать изображения и другие файлы в виде корзины покупок. Выбрав все содержимое, которое пользователь хочет загрузить, он может проверить. До сих пор архив был создан заранее, и пользователь получил электронное письмо со ссылкой на файл после завершения генерации.
Я изменил это сейчас, используя веб-api и push-поток, чтобы напрямую генерировать архив "на лету". Мой код предлагает динамически zip, zip64 или .tar.gz, в зависимости от оценочной файловой системы и операционной системы. По соображениям производительности сжатие ist установлено на лучшую скорость ( "none" сделает zip-архивы несовместимыми с Mac OS, используемая мной библиотека gzip не предлагает ничего).
Пока все работает отлично, однако при загрузке файла пользователь больше не имеет индикатор выполнения, потому что я не настраиваю длину содержимого. Каковы наилучшие способы обойти это? Я попытался угадать результирующий размер файла, но оба браузера отменяют загрузки до раннего или останавливаются на 99, x% и ждут пропавших байтов, что приводит к разнице между оценочным и фактическим размером файла.
Моя первая мысль заключалась в том, чтобы угадать полученный размер файла всегда немного до большого и заполнить остальные нулями?
Я видел много файловых хостеров, предлагающих возможность выбирать файлы из папки и помещать их в zip файл, и все они имеют правильный (?) размер файла с ними и индикатор выполнения. Любые лучшие практики? Спасибо!