Доставка разархивированного файла через сервлет без предварительной разархивации на сервере - PullRequest
2 голосов
/ 11 апреля 2011

В сети, где у меня есть мой веб-сервер, есть машина, на которой есть много zdf-файлов (сжатых с помощью java.util.zip), и я могу получить доступ к этим файлам через HTTP. Когда пользователь хочет загрузить файл PDF, я знаю, как сначала разархивировать файл локально на сервере, а затем доставить разархивированный PDF пользователю через сервлет. Можно ли доставить разархивированный файл пользователю, предварительно не разархивировав его локально?

Привет

Ответы [ 3 ]

1 голос
/ 11 апреля 2011

В принципе, если клиент сказал в своем запросе, что он принимает сжатые gzip данные, вы можете отправить файл PDF в сжатом виде, и клиент распакует его. Однако есть одна проблема: хотя алгоритм сжатия zip-файлов и HTTP Content-Encoding: gzip одинаков, формат Zip-файла имеет несколько дополнительных аспектов (поскольку он может содержать несколько файлов и структуру каталогов), поэтому было бы необходимо раздеть эти вещи раньше. Я не уверен, что это будет намного проще, чем распаковка в вашем сервлете, а затем позволить сервлетному серверу позаботиться о сжатии снова, но попробуйте.

1 голос
/ 11 апреля 2011

Можно ли доставить разархивированный файл пользователю, предварительно не разархивировав его локально?

Это немного зависит от того, что именно вы имеете в виду "локально ", общий ответ" нет ".Чтобы доставить распакованный контент, сначала нужно распаковать его.

Если вы на самом деле имеете в виду, что zip-файл расположен на каком-то нелокальном компьютере, и что вам в настоящее время необходимо сначала сохранить и сжать его локально, прежде чем передавать распакованный контент, тогда ответ будет«да», можно разархивировать и передать его без сохранения файла локально.Просто передайте / украсьте потоки без использования FileInputStream / FileOutputStream.

1 голос
/ 11 апреля 2011

Вы можете отправить ответ на запрос, закодированный в сжатом формате.Если клиент выполняет запрос с заголовком

Accept-Encoding: gzip, deflate

, вы можете, например, предоставить ему содержимое, сжатое с помощью gzip (если вы объявите это с помощью заголовка:)

Content-Encoding: gzip

Источник: Википедия: HTTP-сжатие

...