【问题标题】:Django upload_to outside of MEDIA_ROOTDjango upload_to 在 MEDIA_ROOT 之外
【发布时间】:2010-12-16 06:56:08
【问题描述】:

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

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

到目前为止,我不断收到 django 可疑操作错误! :(

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

非常感谢, 托比。

【问题讨论】:

  • 更重要的是,为什么你的部署脚本会覆盖上传的内容?
  • 它不会覆盖上传,因为我先将目录从媒体目录中复制出来。我正在尝试上传到不同的目录,这样我就可以覆盖媒体而无需移动上传。

标签: python django security upload media


【解决方案1】:

我做了以下事情:

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

【讨论】:

  • 干得好。我刚刚在我正在为工作编写的应用程序中使用 django 文件字段。我可能最终也会走这条路。
【解决方案2】:

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

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,但如果您经常更改该设置可能会造成混淆。

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 2011-06-16
    • 2011-07-27
    • 1970-01-01
    • 2023-01-09
    • 2014-03-17
    • 2015-01-11
    • 2012-06-03
    相关资源
    最近更新 更多