Получить изображение по ObjectId вместо image_name в MongoDB - PullRequest
1 голос
/ 08 октября 2019

В своем приложении фляги я пытаюсь получить изображение, которое я сохранила в MongoDB GridFS. Тем не менее, единственный инструмент, который я смог найти, это mongo.send_file(filename), и похоже, что эта функция поддерживает только получение изображения с использованием имени файла.

Из-за того, что у меня есть разные изображения с одинаковыми именами, мне было интересно, есть ли способ получить изображение, используя уникальный ObjectId файла изображения?

1 Ответ

2 голосов
/ 14 октября 2019

Я тоже занимался этим вопросом. Я прибег к изменению функции send_file в API фляги. Посмотрите на то, что я сделал здесь:

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

Монго в функции - это объект flask_pymongo. Дайте мне знать, если я смогу что-нибудь прояснить!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...