如何从 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 与您的输入文件不同,则可能是该错误。