通过Django管理控制台上传的文件具有错误的权限

时间:2019-03-28 17:19:14

标签: django python-3.x

我的网站部分被封为仅仅是我所进行项目的存储库/免费托管服务。我的网站中有一个名为personal的简单Django项目,专用于此-理想情况下,该过程是

  1. 通过管理控制台(通过personal)将文件上传到mysite.com/admin数据库
    • 此内容保存在/static/media/personal/[foldername]/myproject
  2. 为该文件分配一个短标签(例如myproject
  3. mysite.com/personal/myproject的任何人现在都可以访问该文件,它将重定向到我上传的静态文件。

我的问题是我上载的文件已使用权限0600保存,因此当我稍后尝试使用Web浏览器访问它们时,出现403禁止错误。我可以手动进入服务器并将权限更改为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配置文件或其他内容会更容易,那么它也将起作用。

0 个答案:

没有答案