Я использую 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
файл в этом примере) загружен правильно, и яможете извлечь содержимое.Однако единственная проблема заключается в том, что разрешения для сгенерированного файла не являются ни read
, ни write
для моего пользователя по умолчанию, как и для пользователей моего веб-сайта.
Как изменить разрешения автоматически сгенерированного файла перед загрузкой?
Обновление :
У меня естьпопытался использовать os.chmod
и os.fchmod
, как предложено Майком, но это либо требует имя пути (которого у меня нет), либо выдает ошибку (для fchmod
):
ZipFile instance has no attribute '__trunc__'
Один из вариантов, я полагаю, состоял бы в том, чтобы сначала сохранить zip-файл, установить разрешения, а затем разрешить загрузку, но это кажется излишним - должен быть лучший способ преодоления этой простой проблемы.У кого-нибудь есть какие-либо предложения или идеи?
Update2 :
Кажется, эта проблема ограничена системами Unix, так как она отлично работает в Windows и(видимо) OS X. Есть похожая тема, которую я нашел здесь .Насколько я могу судить, это должно быть связано с методом writestr
.Как установить разрешения для файла, добавляемого в zip-файл, с помощью writestr
?