Я использую Django и Python2.6 для создания zip-файла с настраиваемыми шаблонами Django для каждого пользователя, чтобы загрузить индивидуальный zip
файл. На данный момент код в views.py
выглядит следующим образом:
def download(request):
response = HttpResponse(mimetype='application/x-zip-compressed')
response['Content-Disposition'] = 'attachment; filename=download.zip'
myzip = zipfile.ZipFile(response, 'w')
now = datetime.datetime.now()
zipInfo = zipfile.ZipInfo('thefile.txt', (now.year, now.month, now.day, now.hour, now.minute, now.second))
myzip.writestr(zipInfo, render_to_string('template.txt', locals(), context_instance=RequestContext(request)))
myzip.close()
return response
В основном это работает нормально: загружается zip-файл (содержащий один файл txt
в этом примере) правильно, и я могу извлечь содержимое. Однако единственная проблема заключается в том, что права доступа к сгенерированному файлу не соответствуют ни чтению
, ни записи
для моего пользователя по умолчанию, и не будут также для пользователей моего веб-сайта.
Как изменить разрешения для автоматически созданного файла перед загрузкой?
Обновление :
Я пробовал использовать os.chmod
и os.fchmod
, как было предложено Майком, но для этого либо требуется имя пути (которого у меня нет), либо возникает ошибка (для fchmod
):
Экземпляр ZipFile не имеет атрибута '__trunc__'
Один из вариантов, я думаю, - сначала сохранить zip-файл, установить разрешения, а затем разрешить загрузку, но это кажется излишним - должен быть лучший способ решить эту простую проблему. У кого-нибудь есть предложения или идеи?
Update2 :
Кажется, эта проблема ограничена системами Unix, поскольку она отлично работает в Windows и (очевидно) OS X. Я нашел похожую тему здесь . Насколько я могу судить, это должно быть связано с методом писатель
. Как установить разрешения для файла, добавленного в zip-файл с помощью writerestr
?