изображение возврата фляжки, созданное из базы данных

мои изображения хранятся в MongoDB, я хотел бы вернуть их клиенту, вот как выглядит код:

@app.route("http://img.rupython.com/python<int:pid>.jpg") def getImage(pid): # get image binary from MongoDB, which is bson.Binary type return image_binary 

Однако кажется, что я не могу вернуть двоичный файл непосредственно в Flask?

Вот что я сейчас придумал:

  1. верните base64 двоичного изображения. -> IE <8 не поддерживает это.
  2. создайте временный файл, затем верните его с помощью send_file .

Есть ли лучшие решения?

2 Solutions collect form web for “изображение возврата фляжки, созданное из базы данных”

Установка правильных заголовков должна делать трюк:

 @app.route("http://img.rupython.com/python<int:pid>.jpg") def getImage(pid): response = make_response(image_binary) response.headers['Content-Type'] = 'image/jpeg' response.headers['Content-Disposition'] = 'attachment; filename=img.jpg' return response 

Релевантно: werkzeug.Headers и flask.Response

Изменить: я только что видел, что вы можете передать файловый дескриптор в flask.sendfile , поэтому, может быть:

 return send_file(io.BytesIO(image_binary)) 

это лучший способ (не проверял его).

Просто хотел подтвердить, что второе предложение dav1d верное – я протестировал это (где obj.logo является mongoengine ImageField), отлично работает для меня:

 import io from flask import current_app as app from flask import send_file from myproject import Obj @app.route('/logo.png') def logo(): """Serves the logo image.""" obj = Obj.objects.get(title='Logo') return send_file(io.BytesIO(obj.logo.read()), attachment_filename='logo.png', mimetype='image/png') 

Легче, чем вручную создать объект Response и настроить его заголовки.

  • как использовать QuerySelectField в колбе?
  • Проблемы CSS с веб-приложением Flask
  • Как обслуживать различные настройки конфигурации в флеш-приложении для uwsgi с помощью create_app?
  • Можно ли использовать Mysql с SqlAlchemy и Flask, если мой сокет mysql не находится в / tmp?
  • Запрос SQLAlchemy, соединение по отношениям и порядку по счету
  • Как я могу идентифицировать запросы, сделанные через AJAX в Flask Python?
  • Проект фляги ищет статический файл в проекте вместо корневого каталога
  • Flask-Login вызывает TypeError: объект «bool» не может быть вызван при попытке переопределить свойство is_active
  • Python - лучший язык программирования в мире.