Файлы, загруженные через консоль администратора Django, имеют неправильные разрешения - PullRequest
0 голосов
/ 28 марта 2019

У меня есть раздел моего сайта, оцепленный просто как репозиторий / бесплатный хостинг для проектов, которые я делаю. У меня есть простой проект Django под названием personal, посвященный этому на моем веб-сайте - процесс, в идеале, это

  1. Загрузить файл в базу данных personal через консоль администратора (через mysite.com/admin)
    • сохраняется в /static/media/personal/[foldername]/myproject
  2. Назначьте этому файлу короткий тег (например, myproject)
  3. Теперь этот файл должен быть доступен любому на mysite.com/personal/myproject, который будет перенаправлен на статический файл, который я загрузил.

Моя проблема в том, что загружаемые файлы сохраняются с разрешениями 0600, поэтому, когда я пытаюсь получить к ним доступ позже через веб-браузер, я получаю ошибку 403 Forbidden. Я могу зайти на сервер вручную и изменить разрешения на 0644, и тогда он будет работать нормально, но я бы хотел, чтобы Django сделал это для меня.


Я уже пытался поместить следующее в файл settings.py моего сайта:

FILE_UPLOAD_PERMISSIONS = 0o644

которая была единственной реальной вещью, которую я смог найти благодаря своим исследованиям, которую я смог понять. К сожалению, это, похоже, не помогло. Модель, которую я использую для этой personal базы данных, выглядит следующим образом:

def generate_filename(instance, filename):
    if instance.folder and len(instance.folder) > 0:
        return os.path.join('personal', instance.folder, filename)
    else:
        return 'personal/{}'.format(filename)


class PersonalFile(models.Model):
    """
    A model type representing a single file. Contains only that
    file object.
    """
    def __str__(self):
        return "{} ---> {}".format(self.name, str(self.file))

    """ The url for accessing this file """
    name = models.CharField(max_length=200)
    """ A description for this project """
    description = models.TextField(blank=True, null=True)
    """ Whether this item should be displayed on the projects index """
    display = models.BooleanField(default=True)
    """ A folder for this object to be placed in """
    folder = models.CharField(max_length=200, blank=True, null=True, default=None)
    """ The actual media url of the file """
    file = models.FileField(upload_to=generate_filename)

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

Я использую стандартный стек Django / gunicorn / nginx для развертывания. Для простоты я бы хотел справиться с этим на уровне Django, но если было бы проще изменить некоторые конфигурационные файлы nginx или что-то еще, то это тоже сработало бы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...