如何从 GridFS 存储和获取二进制文件
How to store and get binary files from GridFS
我不确定这是否是我应该使用 GridFS 将二进制文件存储到 mongoDB 的方式。下面的代码是我写的代码:
def write_GridFS_object(file_path,file_name):
with open(file_path) as mydoc:
fs.put(mydoc,filename=file_name)
这是我使用 GridFS 从 mongoDB 获取二进制文件的代码:
def get_binary_file(file_id):
collection = db.fs.chunks
data = collection.find_one({"files_id": file_id},{"_id":0,"data":1})
data1 = str(data)
fo = open("binary.vw", "w")
fo.write(data1)
fo.close()
奇怪的是returns我
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
我不太确定这是不是应该打印出的二进制文件,因为我的没有这样的字符。
有人可以协助检索 storing/binary 文件吗?
您的代码可能是正确的。当你在 Python 2 中打印一个字符串并且它的内容包括“\x00”时,就是 "nil" 字符,ASCII 码 0。如果你的二进制文件是一堆 nil 字符,那么它看起来像你已将其正确存储在 GridFS 中。
在 Python 试试这个:
print repr(open(my_file, 'rb').read())
和这个一样吗?:
print repr(GridFS(db).get(file_id).read())
如果是,则说明您的数据存储正确。
我建议使用 PyMongo 的 GridFS 来读取数据,这样更容易,并且可以避免错误。例如,您的代码中存在错误:
data = collection.find_one({"files_id": file_id},{"_id":0,"data":1})
data1 = str(data)
我相信你的意思是:
data1 = data['data']
如果 binary.vw 与您的输入文件不同,则可能是该错误。
我不确定这是否是我应该使用 GridFS 将二进制文件存储到 mongoDB 的方式。下面的代码是我写的代码:
def write_GridFS_object(file_path,file_name):
with open(file_path) as mydoc:
fs.put(mydoc,filename=file_name)
这是我使用 GridFS 从 mongoDB 获取二进制文件的代码:
def get_binary_file(file_id):
collection = db.fs.chunks
data = collection.find_one({"files_id": file_id},{"_id":0,"data":1})
data1 = str(data)
fo = open("binary.vw", "w")
fo.write(data1)
fo.close()
奇怪的是returns我
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
我不太确定这是不是应该打印出的二进制文件,因为我的没有这样的字符。
有人可以协助检索 storing/binary 文件吗?
您的代码可能是正确的。当你在 Python 2 中打印一个字符串并且它的内容包括“\x00”时,就是 "nil" 字符,ASCII 码 0。如果你的二进制文件是一堆 nil 字符,那么它看起来像你已将其正确存储在 GridFS 中。
在 Python 试试这个:
print repr(open(my_file, 'rb').read())
和这个一样吗?:
print repr(GridFS(db).get(file_id).read())
如果是,则说明您的数据存储正确。
我建议使用 PyMongo 的 GridFS 来读取数据,这样更容易,并且可以避免错误。例如,您的代码中存在错误:
data = collection.find_one({"files_id": file_id},{"_id":0,"data":1})
data1 = str(data)
我相信你的意思是:
data1 = data['data']
如果 binary.vw 与您的输入文件不同,则可能是该错误。