如何从GridFS存储和获取二进制文件

时间:2015-07-01 07:50:03

标签: python mongodb pymongo 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()

奇怪的是它让我回头

\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

我不太确定这是一个二进制文件应该打印出来的,因为我没有这样的字符。

任何人都可以协助检索存储/二进制文件吗?

1 个答案:

答案 0 :(得分:0)

您的代码可能是正确的。当您在Python 2中打印字符串并且其内容包含“\ x00”时,这是“nil”字符,ASCII代码为0.如果您的二进制文件是一堆零字符,那么看起来您已将其正确存储在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与您的输入文件不同,则可能是该错误。