我正在使用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中?
答案 0 :(得分:2)
使用GridFS,您可以保存和读取超过BSON文档文件大小限制(16 MB)的文件。它通常用于存储媒体,因为您可以将数据流式传输到客户端。
GridFS有一个特定的文档结构 - 它实际上由多个文档组成,只需在向GridFS插入内容时在db
中检查它。由于它具有特殊结构且files
可能超过16MB文档大小限制,因此您无法在其他文档中包含GridFS文档。
如果要引用某些GridFS对象,可以保存特定GridFS文件的file_id
,并在需要检索内容时查询。
答案 1 :(得分:1)
您需要将数据库对象传入GridFS构造函数。
fs = gridfs.GridFS(db)