我不确定这是否应该使用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
我不太确定这是一个二进制文件应该打印出来的,因为我没有这样的字符。
任何人都可以协助检索存储/二进制文件吗?
答案 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与您的输入文件不同,则可能是该错误。