Django upload_to在MEDIA_ROOT之外

时间:2009-11-13 12:51:07

标签: python django security upload media

我的部署脚本会覆盖媒体和源目录,这意味着我必须将上传目录移出媒体目录,并在提取上传后将其替换。

如何指示django上传到/ uploads /而不是/ media /?

到目前为止,我一直在收到django可疑操作错误! :(

我想另一种解决方案可能是符号链接?

非常感谢, 托比。

2 个答案:

答案 0 :(得分:50)

我做了以下事情:

from django.core.files.storage import FileSystemStorage

upload_storage = FileSystemStorage(location=UPLOAD_ROOT, base_url='/uploads')

image = models.ImageField(upload_to='/images', storage=upload_storage) 

UPLOAD_ROOT在我的settings.py文件中定义:/foo/bar/webfolder/uploads

答案 1 :(得分:0)

虽然接受的答案可能是您想要的,但我们现在可以选择 django 3.1,我们可以通过将函数传递给 ImageField 的存储参数来决定在运行时使用哪个存储或FileField

def select_storage():
    return MyLocalStorage() if settings.DEBUG else MyRemoteStorage()


class MyModel(models.Model):
    my_file = models.FileField(storage=select_storage)

看看官方的docs.

请注意,当前接受的答案将变量 UPLOAD_ROOT 的实际值写入迁移文件。当您将其应用于数据库时,这不会产生任何 SQL,但如果您经常更改该设置,可能会造成混淆。