Установка правильных разрешений на сгенерированный zip-файл в Django

Я использую 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 ?

7
задан Community 23 May 2017 в 12:12
поделиться