【问题标题】:Django uploading file not in MEDIA_ROOT path is giving me SuspiciousOperation errorDjango 上传不在 MEDIA_ROOT 路径中的文件给我 SuspiciousOperation 错误
【发布时间】:2011-04-07 14:41:47
【问题描述】:

我想将文件上传到仍在我的 django 项目中但在我的MEDIA_ROOT 路径中的路径。

当我尝试执行此操作时,我收到 SuspiciousOperation 错误。

以下是我的设置文件中定义的路径:

MEDIA_ROOT = os.path.join(os.path.dirname( __file__ ), 'static_serve')
UPLOAD_DIR = os.path.join(os.path.dirname( __file__ ), 'uploads')

我这样做是因为我不希望通过浏览器访问我上传的文件,而我的 MEDIA_ROOT 路径是。

有谁知道我如何绕过(修复)这个错误。

【问题讨论】:

  • 您可以禁止Web服务器公开服务MEDIA_ROOT下的某些目录。
  • 我现在正在使用测试服务器...在 Windows XP 上。我也不确定该怎么做。
  • 我不认为开发服务器可以,但任何生产就绪的网络服务器都应该能够限制对文件的访问。例如,Here 是 Apache 的做法。
  • 那么,是不是不能上传MEDIA_ROOT路径以外的文件呢?我希望这是因为如果我无法找到解决方案,我将不得不重做大量代码。

标签: python django django-uploads


【解决方案1】:

是的there is a way:

来自文档:

例如,下面的代码将 将上传的文件存储在 /媒体/照片,无论你的 MEDIA_ROOT 设置为:

from django.db import models
from django.core.files.storage import FileSystemStorage

fs = FileSystemStorage(location='/media/photos')

class Car(models.Model):
    ...
    photo = models.ImageField(storage=fs)

【讨论】:

  • +1 这值得了解。糟糕的 OP 不会投票给这个最佳答案。
  • 我遇到了同样的问题。你(和文档)说了什么,我得到了以下异常FileFields require an "upload_to" attribute.我在这里粘贴了整个块:dpaste.com/hold/533577有什么想法吗?
  • 只需将upload_to添加为与位置相同的值。
  • @Tom,你错了。 location 属性是绝对路径,upload_to 是相对路径,并附加到 MEDIA_ROOT。
猜你喜欢
  • 1970-01-01
  • 2010-10-08
  • 2016-02-25
  • 2020-10-13
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
相关资源
最近更新 更多