반응형
데이터베이스에 저장된 이미지를 반환하는 Flask
내 이미지는 MongoDB에 저장되며 클라이언트에 반환하고 싶습니다. 코드는 다음과 같습니다.
@app.route("/images/<int:pid>.jpg")
def getImage(pid):
# get image binary from MongoDB, which is bson.Binary type
return image_binary
그러나 Flask에서 바이너리를 직접 반환 할 수없는 것 같습니다. 지금까지 내 생각 :
base64
이미지 바이너리 의 를 반환합니다 . 문제는 IE <8이 이것을 지원하지 않는다는 것입니다.- 임시 파일을 만든 다음
send_file
.
더 나은 솔루션이 있습니까?
데이터로 응답 개체를 만든 다음 콘텐츠 형식 헤더를 설정합니다. attachment
브라우저가 파일을 표시하는 대신 저장하도록 하려면 컨텐츠 처리 헤더를로 설정하십시오 .
@app.route('/images/<int:pid>.jpg')
def get_image(pid):
image_binary = read_image(pid)
response = make_response(image_binary)
response.headers.set('Content-Type', 'image/jpeg')
response.headers.set(
'Content-Disposition', 'attachment', filename='%s.jpg' % pid)
return response
send_file
완전한 응답을 설정하기 위해 파일과 같은 객체와 헤더 인수를 전달할 수 있습니다 . 사용 io.BytesIO
바이너리 데이터에 대한 :
return send_file(
io.BytesIO(image_binary),
mimetype='image/jpeg',
as_attachment=True,
attachment_filename='%s.jpg' % pid)
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')
수동으로 응답 개체를 만들고 헤더를 설정하는 것보다 쉽습니다.
나와 함께 저장된 이미지 경로가 있다고 가정합니다. 아래 코드는 이미지를 보내는 데 도움이됩니다.
from flask import send_file
@app.route('/get_image')
def get_image():
filename = 'uploads\\123.jpg'
return send_file(filename, mimetype='image/jpg')
uploads는 123.jpg가있는 내 이미지가있는 폴더 이름입니다.
[PS : 업로드 폴더는 스크립트 파일의 현재 디렉토리에 있어야합니다.]
도움이 되었기를 바랍니다.
참고 URL : https://stackoverflow.com/questions/11017466/flask-to-return-image-stored-in-database
반응형
'Nice programing' 카테고리의 다른 글
다른 파일의 내용을 읽어서 makefile에 변수 만들기 (0) | 2020.12.10 |
---|---|
Vim Command-T 플러그인 오류 : C 확장을로드 할 수 없습니다. (0) | 2020.12.10 |
PostgreSQL IF 문 (0) | 2020.12.10 |
C ++ 기본 인수를 다른 인수로 초기화 할 수 있습니까? (0) | 2020.12.09 |
Google Maps V3에서 번호가 매겨진지도 마커를 어떻게 만들 수 있습니까? (0) | 2020.12.09 |