Это зависит от протокола, который вы используете для передачи файлов. Обычно это уже сделано прозрачно.
Протокол HTTP (и HTTPS) поддерживает сжатие «на лету» при условии, что его реализуют как сервер, так и клиент. Прежде всего, клиент сообщит серверу, какой тип сжатия он поддерживает. Типичный заголовок HTTP-запроса содержит следующую строку:
Accept-Encoding: gzip, deflate
Сервер выберет алгоритм сжатия, который он поддерживает, укажет в HTTP-заголовке (как показано ниже) и предоставит сжатое содержимое.
Content-Encoding: gzip
Большинство современных HTTP-клиентов (таких как Chrome, Firefox, Internet Explorer, Safari и т.д. В алфавитном порядке) и серверов (таких как Apache, Microsoft IIS, nginx) при правильной настройке передают сжатые данные на лету.
Аналогично, другие протоколы могут реализовывать сжатие, например, режим Z в FTP. Специализированные протоколы, такие как удаленное разностное сжатие от Microsoft, позволяют синхронизировать локальные и удаленные файлы, передавая только разные части.
РЕДАКТИРОВАТЬ:
Я обнаружил, что прозрачное HTTP-сжатие предназначено только для загрузки файлов, но не наоборот. Если вы хотите сжать данные для загрузки, вам может понадобиться написать некоторый Javascript и использовать FileReader
и библиотеку сжатия, например compressjs
.