Файлы ZIP повреждены IE - PullRequest
       14

Файлы ZIP повреждены IE

3 голосов
/ 13 октября 2009

Я доставляю ZIP-файл в виде фрагментов по 64 Кб, используя цикл в PHP (но проблема может возникнуть с любым языком на стороне сервера).

При загрузке файла с помощью FF все идет отлично.

При загрузке файла с IE7 некоторые биты повреждаются. Это приводит к сообщению об ошибке, касающемуся неправильного CRC (хеш-код), и некоторые из разархивированных файлов оказываются поврежденными.

Отправляются следующие заголовки:

Expires: 0
Cache-Control: must-revalidate, post-check=0, pre-check=0
Pragma: public
Content-Description: File Transfer
Content-Disposition: attachment; filename="671fb8f80f5e94984c59e61c3c91bb70.zip";
Content-Transfer-Encoding: binary
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/octet-stream

Кто-нибудь знает, откуда взялась эта коррупция?

Ответы [ 3 ]

6 голосов
/ 13 октября 2009

Благодаря предыдущим ответам мне удалось решить проблему:

Apache mod_deflate закодировал ответы в gzip. Это имело два эффекта при отправке файла кусками:

  1. Заголовок Content-Length не был отправлен
  2. Доставленные файлы были повреждены при использовании IE7

Решением в php является отключение кодирования ответа с помощью следующей команды:

apache_setenv('no-gzip', '1');
4 голосов
/ 13 октября 2009
Content-Encoding: gzip

Вы намеревались сжать ваш (уже сжатый) почтовый индекс? Я предполагаю, что ваш веб-сервер добавляет этот заголовок, но если вы добавили его самостоятельно с помощью PHP, возможно, это может быть проблемой?

1 голос
/ 13 октября 2009

В этой статье MSDN объясняется, что IIS кодирует ZIP-файлы с использованием gzip, но без надлежащих заголовков он не будет декодировать его перед отправкой в ​​программу разархивирования. Firefox, вероятно, достаточно умен, чтобы автоматически его декодировать. В статье упоминается исправление, хотя в названии статьи не упоминается ваша проблема.

Я бы на всякий случай перепроверил ваши настройки IIS.

...