Помогите создать ZIP файлы Windows не заблокирует - PullRequest
2 голосов
/ 13 июля 2010

Я создал приложение, которое берет версии проекта с тегами из репозитория hg и создает загружаемый ZIP-файл с этой версией с тегами.

Файлы создаются на сервере MediaTemple под управлением Linux с использованием библиотеки кодирования ZIP CodeIgniter. Все отлично работает ... на Mac. Но когда я загружаю файлы на компьютер под управлением Windows, архив блокируется для извлечения.

ZIP содержит файлы .html, .css, .gif, .png и .js, и я почти уверен, что файлы .js являются виновником безопасности, но мне интересно, почему я могу скачать плагин Jcrop jQuery (или любые другие примеры) в виде ZIP-файла и извлечение его без вмешательства Windows, даже если он, очевидно, содержит .js файлы, но что-то в моем ZIP-файле представляет угрозу безопасности.

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

Любая обратная связь будет принята с благодарностью! Дайте мне знать, если вам нужно больше информации.

Вы можете скачать файл примера здесь .

EDIT:

  • Я использую Windows XP
  • Я не запускаю антивирус
  • Предупреждение: Windows заблокировала доступ к этим файлам, чтобы защитить ваш компьютер
  • Я разблокировал файл, но это ничего не делает
  • Файл на моем рабочем столе

РЕДАКТИРОВАТЬ 2:

  • Я добавил файл примера внизу. Или вы можете увидеть это здесь
  • Я использовал инструменты извлечения по умолчанию только в XP и Windows 7.
  • ZIP в Windows кажется пустым, и я не вижу ни одного из файлов.

РЕДАКТИРОВАТЬ 3:

  • Из комментариев и ответов видно, что имена файлов были проблемой из-за дополнительного /, добавляемого где-то в процессе. Я загрузил новый пример загрузки , созданный моим приложением с исправлением имени файла, который вы можете загрузить здесь . Пожалуйста, дайте мне знать, если это решит проблему.

Ответы [ 3 ]

4 голосов
/ 18 июля 2010

Действительно, ведущий '/' - это то, что заставляет молнию не быть извлеченной. Я доказал это, написав скрипт на Python для создания модифицированной версии zip-файла без абсолютных путей к файлам:

from zipfile import *

orig = ZipFile('download.zip', 'r')
fixed = ZipFile('fixed.zip', 'w')
for fileinfo in orig.infolist():
    fixed.writestr(fileinfo.filename[1:], orig.read(fileinfo.filename)) 
fixed.close()

(это не приводит к повторному сжатию файлов, но доказывает, что именно имена файлов вызывают проблему)

Если вы используете функцию библиотеки zip библиотеки CodeIgniter read_dir, то это должно быть виновником, использующим абсолютные пути к файлам. Попробуйте рекурсивно пройтись по структуре каталогов, используя PHP, а вместо этого использовать функцию add_data. Это позволяет вам использовать любую произвольную структуру пути для каждого файла, поэтому вы можете записывать относительные пути.

3 голосов
/ 18 июля 2010

Это может произойти, если файлы заархивированы с использованием полного пути к каталогу, а не относительного пути. Вы можете найти пример этой проблемы здесь:

http://community.sharpdevelop.net/forums/p/1416/4532.aspx#4532

Возможно, вам придется воспользоваться другой утилитой zip или написать свою собственную.

0 голосов
/ 13 июля 2010

Может быть полезно упомянуть, какую версию окон вы используете, а также точную ошибку, которую вы получаете.Это Windows 7, и вы пытаетесь открыть файлы в защищенной папке случайно или вы просто пытаетесь открыть его на рабочем столе?

Не думаю, что это как-то связано с тем, как был создан zip-файл, но я могу ошибаться.

...