我的网站的一部分被封锁,只是作为我制作的项目的存储库/免费托管服务。我在我的网站中有一个personal
专门用于此的简单 Django 项目 - 理想情况下,该过程是
- 通过管理控制台(通过)
将文件上传到
personal
数据库mysite.com/admin
- 这保存在
/static/media/personal/[foldername]/myproject
- 这保存在
- 为该文件分配一个短标签(例如
myproject
) - 现在,任何人都应该可以访问该文件
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 配置文件或其他东西更容易,那也可以。