我的网站部分被封为仅仅是我所进行项目的存储库/免费托管服务。我的网站中有一个名为personal
的简单Django项目,专用于此-理想情况下,该过程是
personal
)将文件上传到mysite.com/admin
数据库
/static/media/personal/[foldername]/myproject
myproject
)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配置文件或其他内容会更容易,那么它也将起作用。