Ошибка «Сжатая (zip) папка недействительна или повреждена» после загрузки zip-файла — иногда, но не всегда

Ошибка «Сжатая (zip) папка недействительна или повреждена» после загрузки zip-файла — иногда, но не всегда

У меня есть zip-архив размером ~250 Мб, расположенный на сервере Apache HTTP. Несколько пользователей жаловались на "поврежденную zip-папку" после загрузки файла напрямую с сайта (хотя сайт и построен на Drupal, но он использует метод публичной загрузки, так что это должна быть прямая загрузка)

При попытке открыть его в Windows появляется следующее сообщение об ошибке:

Сжатая папка (zip) недействительна или повреждена

Я сам пробовал это на Windows XP и с использованием Firefox 14 и IE8. Иногда скачивается и открывается правильно, иногда возникает ошибка.

Другой пользователь использует Windows 7 и Internet Explorer и получил это сообщение после нескольких попыток загрузки.

При загрузке по FTP с помощью Filezilla я могу открыть zip-файл без ошибок.

Поскольку загрузка по FTP и HTTP работает время от времени, я предполагаю, что файл на сервере не поврежден, а что-то происходит во время загрузки, и повторная загрузка файла ничего не исправит (и я пробовал это).

Я создал zip-файл с помощью IZArc, но не уверен, что метод создания уместен в данном случае, так как иногда он работает.

  1. Что является причиной появления вышеуказанных сообщений об ошибках?
  2. Почему это происходит иногда, а не всегда?
  3. Что можно сделать, чтобы гарантировать, что zip-файлы в будущем будут открываться без ошибок?

решение1

Что является причиной появления вышеуказанных сообщений об ошибках?

Загрузка, вероятно, повреждена или обрезана (неполная). Проверьте, совпадает ли размер загруженного файла с размером на сервере.

Почему это происходит иногда, а не всегда?

Загрузка может быть прервана из-за разрыва соединения, что является случайным явлением — это может произойти, а может и нет. Если качество соединения лучше, то вероятность этого будет ниже.

Что можно сделать, чтобы гарантировать, что zip-файлы в будущем будут открываться без ошибок?

Предоставьте контрольные суммы для всех ваших загрузок и попросите ваших пользователей проверить их. Однако вы не сможете избежать сетевых проблем. Вы можете поговорить с вашим хостером.

решение2

Одна из вещей, которую вы можете сделать, чтобы устранить неполадки, это использовать хэши MD5 или SHA-1 этого zip-файла. Я предполагаю, что у вас есть оригинальный zip-файл, доступный вам в автономном режиме.

С использованиемCygwin, вы можете вычислить хэш SHA-1 или MD5 вашего zip-файла, а затем опубликовать результат. Хэши действительно круты, потому что их можно использовать для проверки на уровне битов того, что один файл полностью совпадает с другим. Например: хэш для файла, содержащего «0123456789», равен 3749f52bb326ae96782b42dc0a97b4c1. Хэш для файла, содержащего «1123456789», равен b0b7fa225796be83e7fea1345c13d3dd.

Если я правильно помню свой ASCII, между двумя строками разница всего в один бит, но, как вы видите, в результирующих хэшах разница огромная. Публикация хэша MD5 или SHA-1 — очень распространенная практика в мире разработки программного обеспечения, поскольку это очень хороший способ убедиться, что ваши файлы не повреждены. После публикации хэша MD5/SHA-1 вы можете попросить своих клиентов сделать хэш zip-архива, чтобы проверить, поврежден ли он на самом деле или нет.

Существует множество утилит для Windows, Linux и Mac, которые генерируют хэши MD5 и SHA-1. Я использую Cygwin, потому что он бесплатный.

решение3

Обычно это происходит, когда одно из имен файлов в ваших папках содержит специальный символ, например кавычки ". Такие файлы следует игнорировать.

Но это сложно, когда у вас несколько тысяч файлов, может быть, вы можете попробовать7-молния.

решение4

Если файл на стороне клиента имеет правильный размер, эта ситуация может быть вызвана неисправной памятью на клиентском ПК или неисправным сетевым оборудованием между ними. Часто случайное переключение битов не особенно заметно во многих приложениях, но когда дело доходит до контрольных сумм, которые используются для проверки целостности архива, каждый бит имеет значение, и эти ошибки становятся очевидными.

Связанный контент