Flacon de retour d'une image stockée dans la base de données
Mes images sont stockées dans un MongoDB, et j'aimerais retourner au client, voici comment le code est comme:
@app.route("/images/<int:pid>.jpg")
def getImage(pid):
# get image binary from MongoDB, which is bson.Binary type
return image_binary
Cependant, il semble que je ne peut pas revenir en binaire directement dans le Flacon? Mon idée pour l'instant:
- Retour de la
base64
de l'image binaire. Le problème est que IE<8 ne prend pas en charge cette. - Créer un fichier temporaire, puis de le retourner avec
send_file
.
Sont t-il de meilleures solutions?
- double possible de Comment faire pour retourner les images en flacon de réponse?
Vous devez vous connecter pour publier un commentaire.
Créer un objet de réponse avec les données, puis de définir le type de contenu d'en-tête. Définir la disposition du contenu de l'en-tête de
attachment
si vous souhaitez que le navigateur d'enregistrer le fichier au lieu de l'afficher.Pertinentes: werkzeug.Les en-têtes et flacon.Réponse
Vous pouvez passer d'un fichier-comme oject et l'en-tête arguments pour
send_file
laisser configurer la réponse complète. Utilisationio.BytesIO
pour des données binaires:b'<binary image data>'
) peut entraîner uneUnicodeError
.send_file()
peut-être un peu mieux.with
clause?Voulais juste confirmer que dav1d seconde suggestion est exact - je l'ai testé ce (où obj.le logo est une mongoengine ImageField), fonctionne très bien pour moi:
Plus facile que la création manuelle d'un objet de Réponse et les paramètres de ses en-têtes.
Supposons que j'ai l'image stockée chemin avec moi. Le code ci-dessous permet d'envoyer l'image à travers.
uploads est mon nom de dossier où mon image avec 123.jpg est présent.
[PS: Le dossier téléchargements doivent être dans le répertoire courant à compter de la votre fichier de script]
Espère que cela aide.