【发布时间】:2019-10-08 00:42:00
【问题描述】:
在我的烧瓶应用程序中,我试图检索存储在 MongoDB GridFS 中的图像。但是,我能找到的唯一工具是mongo.send_file(filename),而且这个函数似乎只支持使用文件名获取图像。
由于我有同名的不同图像,我想知道是否有办法使用图像文件的唯一 ObjectId 检索图像?
【问题讨论】:
在我的烧瓶应用程序中,我试图检索存储在 MongoDB GridFS 中的图像。但是,我能找到的唯一工具是mongo.send_file(filename),而且这个函数似乎只支持使用文件名获取图像。
由于我有同名的不同图像,我想知道是否有办法使用图像文件的唯一 ObjectId 检索图像?
【问题讨论】:
我也一直在处理这个问题。我求助于修改烧瓶 API 上的 send_file 函数。看看我在这里做了什么:
from flask import current_app, request
from werkzeug.wsgi import wrap_file
from bson.objectid import ObjectId
from gridfs import GridFS, NoFile
def retrieve_image(file_id, mongo):
storage = GridFS(mongo.db, "fs")
try:
fileobj = storage.get(file_id=ObjectId(file_id))
except NoFile:
#404
print()
# mostly copied from flask/helpers.py, with
# modifications for GridFS
data = wrap_file(request.environ, fileobj, buffer_size=1024 * 255)
response = current_app.response_class(
data,
mimetype=fileobj.content_type,
direct_passthrough=True,
)
response.content_length = fileobj.length
response.last_modified = fileobj.upload_date
response.set_etag(fileobj.md5)
response.cache_control.max_age = 31536000
response.cache_control.public = True
response.make_conditional(request)
return response
函数中的Mongo是flask_pymongo对象。让我知道我是否可以解决任何问题!
【讨论】: