【问题标题】:django + mongodb + gridfs - 'str' object has no attribute 'size'django + mongodb + gridfs - 'str' 对象没有属性 'size'
【发布时间】:2014-05-14 01:54:40
【问题描述】:

我正在尝试让 mongodb + gridfs 为 django 工作,以便我可以从 django 中提供文件,但是在以编程方式创建新文件时,我收到此错误。我不确定要遵循哪些文件,因为其中一些文件似乎已过时。

这是我的 settings.py:

DATABASES = {
    'files': {
        'ENGINE': 'django_mongodb_engine',
        'NAME': 'files',
        'USER': 'files',
        'PASSWORD': 'files',
        'HOST': 'localhost',
        'PORT': 27017,
        'SUPPORTS_TRANSACTIONS': False,
    }
}


DEFAULT_FILE_STORAGE = 'mongo_storage.storage.GridFSStorage'
GRIDFS_DATABASE = 'files'

而且,在我的模型中,我只是使用一个文件字段:

data = models.FileField(upload_to="/tmp/uploads")

然后,我正在创建一个新文件...:

internal_file = File()
internal_file.data.save(checksum, open(path).read())

那是我得到属性错误的时候。

我是否需要以不同方式配置我的模型,而不是显式调用 save() 方法?

【问题讨论】:

  • 您需要将内容包装在 ContentFile 中,或者在调用 save() 时将文件处理程序包装在 Django File 对象中。看看这个答案:stackoverflow.com/a/7515224/1530272
  • 我一次又一次地尝试过,我得到这个错误:对于类型字符变化(32)的值太长。我不确定这是一个积极的步骤还是一个侧面的步骤。
  • 积极步骤:根据您的数据库约束,您上传到的路径必须少于 32 个字符。要么增加文件名字段的最大字符大小,要么使用更短的文件名
  • 嗨 Sohan,那是 mongodb 名称字段还是什么?我尝试更改模型的约束以及更改文件名本身。

标签: python django mongodb gridfs


【解决方案1】:

我想通了,我只需要这样做:

image.data.save(image.checksum, File(open(path)))

在这样做之前,我只是传入了一个常规的 python 文件,这就是问题所在。

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2020-04-01
    • 2021-11-12
    相关资源
    最近更新 更多