MongoDB GridFS Python download_to_stream_by_name 抛出 'unicode' 对象没有属性 'write'

MongoDB GridFS Python download_to_stream_by_name throws 'unicode' object has no attribute 'write'

使用 MongoDB 的 PyMongo 驱动程序时,我能够使用 bucket.upload_from_stream(文件名,地址)成功将图像上传到 GridFS。它非常简单,没有并发症。 但是当我尝试使用 bucket.download_to_stream_by_name(filename, address) 检索相同的数据时,第二个参数作为目标,它会抛出一个错误:

AttributeError: 'unicode' object has no attribute 'write'

为什么会这样?如何设置我要保存文件的位置?

下面是使用 download_to_stream_by_name 并在磁盘目录中创建文件的示例:

import os
from pymongo import MongoClient
from gridfs import GridFSBucket

my_db = MongoClient().test
fs = GridFSBucket(my_db)
file_id = fs.upload_from_stream(
    "test_file",
    "data I want to store!",
    chunk_size_bytes=4,
    metadata={"contentType": "text/plain"})

fs = GridFSBucket(my_db)
# Get file to write to
if not os.path.exists('my_directory'):
    os.makedirs('my_directory')

file = open('my_directory/myfile','wb')
fs.download_to_stream_by_name("test_file", file)

"file-like object" 是一种具有 "write" 方法的方法,该方法需要写入字符块。 "open" 函数创建的实际文件对象是类文件对象的一种可能性。

注意,传递给 download_to_stream_by_name 的文件名是 GridFS 中的文件名,而不是磁盘上的文件名。