将图像存储在 MongoDB

Store images in MongoDB

我正在使用 PyMongo 连接到我的数据库,当用户上传图像时,我想使用 GridFS 将其存储在集合中的用户特定文档中。我是这样做的:

class uploadHandler(BaseHandler):

@tornado.web.authenticated

def get(self):

    self.render("upload.html",user=self.current_user)

def post(self):
    db = pymongo.Connection('mongodb://heroku_app.mongolab.com:/heroku_app').heroku_appxxxx
    user = db.userInfo.find_one({'Username':self.current_user})
    file1 = self.request.files['images'][0]
    original_fname = file1['filename']

    print "file: " + original_fname + " is uploaded"

    fs = gridfs.GridFS(user)
    fs.put(file1)
    #db.userInfo.update({'Username':self.current_user},{'$push':{'Images': file1}})  

    self.redirect('/upload')

但这给了我错误:

  Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\tornado\web.py", line 1332, in _execute
    result = method(*self.path_args, **self.path_kwargs)
  File "C:\Users\rsaxs\workspace\pie\src\Server.py", line 4101, in post
    fs = gridfs.GridFS(user)
  File "C:\Python27\lib\site-packages\gridfs\__init__.py", line 53, in __init__
    raise TypeError("database must be an instance of Database")
TypeError: database must be an instance of Database

如何才能最好地将图像存储在集合中特定文档的 mongoDB 中?

您需要将数据库对象传入GridFS构造函数。

fs = gridfs.GridFS(db)

使用 GridFS,您可以保存和读取超过 BSON 文档文件大小限制 (16 MB) 的文件。它通常用于存储媒体,因为您可以将数据流式传输到客户端。

GridFS 有一个特定的文档结构 -- 它实际上由多个文档组成,当您向 GridFS 插入内容时,只需在您的 db 中检查它。由于它具有特殊的结构并且 files 可能会超过 16MB 的文档大小限制,因此您不能在其他文档中包含 GridFS 文档。

如果你想引用一些 GridFS 对象,你可以通过保存特定 GridFS 文件的 file_id 并在你需要检索它的内容时查询它。