2012-08-20 5 views
3
from flask import Flask, redirect, url_for 

app = Flask(__name__) 
@app.route('/') 
def index(): 
     generate_img("test.jpg"); 
     return '<img src=' + url_for(filename='test.jpg') + '>' 

generate_img()은 임의의 이미지를 현재 디렉토리 (이 스크립트와 동일한 폴더)에 출력합니다.플라스크 : 동적으로 생성 된 이미지 파일의 URL을 얻는 방법은 무엇입니까?

나는 404를 얻고 있습니다. mydomain.com/test.jpg로 이동하지만 거기에는 없습니다.

답변

6

이미지가 실제로 생성되었다고 가정하면 (즉, index()가 호출 된 경우), 404에 대한 이유는 이미지를 가리키는 경로가 없으므로 Flask가 mydomain.com이 없음을 알려줍니다 /test.jpg. Apache 나 Nginx와 같은 정적 웹 서버는 기본적으로 루트에서 URL 로의 경로를 매핑하지만 일반적인 Flask/Werkzeug/WSGI 설정은 그렇게하지 않습니다.

대신 이미지를 직접 반환하는 리소스를 만들고 싶습니까?

편집 : 비슷한 이미지가 제공 될 수 있습니다.

@app.route("/imgs/<path:path>") 
def images(path): 
    generate_img(path) 
    fullpath = "./imgs/" + path 
    resp = flask.make_response(open(fullpath).read()) 
    resp.content_type = "image/jpeg" 
    return resp 

EDIT2 물론 generate_img는 디스크에 기록하지 않고 이미지 데이터를 직접 반환 할 수 있도록 재 작성 될 수 있습니다.

+1

이미지를 직접 반환하는 리소스를 만드는 방법은 무엇입니까? 그래서 이것은 플라스크에서 전혀 가능하지 않습니까? 기본적으로 Flask 서버에서 이미지 및 파일에 액세스 할 수 있어야합니다. – KJW

+0

다음과 같은 방법, 나는 믿습니다 : http://stackoverflow.com/a/25141268/1082367 –

6

404 오류의 원인은이를 처리 할 수있는보기가 없다는 것입니다. , 플라스크에서 이미지를 제공 정적 폴더 안에 이미지를 저장 한 다음 URL을

mydomain.com/static/test.jpg

 from flask import Flask, redirect, url_for 

    app = Flask(__name__) 
    @app.route('/') 
    def index(): 
      generate_img("test.jpg"); #save inside static folder 
      return '<img src=' + url_for('static',filename='test.jpg') + '>' 

정적 폴더에서 이미지에 액세스 할 수 있습니다하려면 모든 미디어를 제공는 CSS, 자바 스크립트, 비디오 수있다 또는 mydomai.com/static/filename에서 액세스 할 수있는 모든 이미지 파일. 프로덕션에서 고정 폴더에서 제공하는 플라스크를 사용해서는 안됩니다. 이 기능은 개발 용으로 만 제공됩니다.

+0

그래서 생산을 위해 정적 폴더를 사용하지 않습니까? 다른 폴더 이름을 사용 하시겠습니까? – KJW

+0

정적 폴더도 사용할 수 있지만 아파치 또는 그 폴더에서 미디어를로드하는 데 사용하는 서버를 설정해야합니다. 그렇지 않으면 플라스크가 계속 그 자체를 제공하면 성능 문제가 발생할 것입니다. 이 blogpost의 마지막 줄에서 http://manavgoel.net/blog/post/2012/7/Deploying-flask-website-on-webfaction에 대해 Apache를 설정하는 방법을 확인하십시오. – codecool

관련 문제