我需要将文件上传到MongoDB。目前我使用Flask将文件保存在当前文件系统的文件夹中。有没有办法可以在不使用GridFS的情况下将文件上传到MongoDB?我相信我早就做过类似的事情,但是自从我上次使用MongoDB以来已经很久没有回忆起来了。
我选择上传的任何文件大小不超过16MB。
更新:我尝试使用binData
转换图片文件,但会引发错误global name binData is not defined
。
import pymongo
import base64
import bson
# establish a connection to the database
connection = pymongo.MongoClient()
#get a handle to the test database
db = connection.test
file_meta = db.file_meta
file_used = "Headshot.jpg"
def main():
coll = db.sample
with open(file_used, "r") as fin:
f = fin.read()
encoded = binData(f)
coll.insert({"filename": file_used, "file": f, "description": "test" })
答案 0 :(得分:3)
Mongo BSON(https://docs.mongodb.com/manual/reference/bson-types/)具有字段的二进制数据(binData
)类型
Python驱动程序(http://api.mongodb.com/python/current/api/bson/binary.html)支持它。
您可以将文件存储为字节数组。
您的代码应略有修改:
from bson.binary import Binary
encoded = Binary(f)
以下完整示例:
import pymongo
import base64
import bson
from bson.binary import Binary
# establish a connection to the database
connection = pymongo.MongoClient()
#get a handle to the test database
db = connection.test
file_meta = db.file_meta
file_used = "Headshot.jpg"
def main():
coll = db.sample
with open(file_used, "rb") as f:
encoded = Binary(f.read())
coll.insert({"filename": file_used, "file": encoded, "description": "test" })