У меня есть PHP-сайт с большим количеством медиа-файлов, и пользователи должны иметь возможность загружать несколько файлов одновременно в формате .zip. Я пытаюсь использовать ZipStream для обслуживания архивов на лету со сжатием "store", поэтому мне не нужно создавать архив на сервере, так как некоторые файлы огромны, и это непозволительно медленно сжимать их все.
Это прекрасно работает, и полученные файлы могут быть открыты всеми программами zip, которые я пробовал, без ошибок, за исключением стандартной программы разархивирования OS X, Archive Utility. Вы дважды щелкаете по файлу .zip, и Archive Utility решает, что он не выглядит как настоящий zip, и вместо этого сжимает в файл .cpgz.
Использование unzip или ditto в терминале OS X или StuffIt Expander без проблем распаковывает файл, но мне нужна программа по умолчанию (Archive Utility), чтобы работать ради наших пользователей.
Какие вещи (флаги и т. Д.) В других приемлемых zip-файлах могут заставить Archive Utility думать, что файл не является действительным zip-файлом?
Я прочитал этот вопрос , который, кажется, описывает аналогичную проблему, но у меня не установлены биты общего поля битов общего назначения, так что это не проблема третьего бита, и я уверен, У меня есть действующие crc-32, потому что, когда у меня их нет, WinRAR выбрасывает.
Я рад опубликовать некоторый код или ссылку на «плохой» zip-файл, если это поможет, но я в основном просто использую ZipStream, переводя его в «режим больших файлов» и используя «store» в качестве метод сжатия.
Редактировать - я тоже попробовал алгоритм сжатия "deflate" и получил те же результаты, поэтому я не думаю, что это "магазин". Стоит также отметить, что я извлекаю файлы один раз с сервера хранения и отправляю их по мере их поступления, поэтому решение, требующее загрузки всех файлов перед отправкой чего-либо, не будет жизнеспособным (крайне Пример: 5 ГБ + 20 МБ файлов. Пользователь не может дождаться, когда все 5 ГБ будут переданы на почтовый сервер, прежде чем начнется их загрузка, или они подумают, что он поврежден)
Вот 140-байтовый сжатый тестовый zip-файл, сохраняющий это поведение: http://teknocowboys.com/test.zip