2017-04-24 7 views
1

私はここでリンクを参照しました:More than one static path in local Flask instanceと、ブラウザのタブで画像ファイルを表示しようとしましたが、そうすることができませんでした。間違いを解消できません。 stored_nameは、app config定数変数: 'UPLOAD_FOLDER'で指定されたパスに格納されているファイルの物理ファイル名です。 このフォルダは静的フォルダとそのサブフォルダのパスにありません。ファイルの記憶容量を増やしたいのですが(イメージファイルでも可能です)、後でハードディスクスペースを追加することで、ストレージに静的フォルダを使用すると難しくなります。フラスコのインポートsend_from_directoryフラスコ内のカスタム静的パスapi?

@app.route('/api/v1.0/docs/<path:filename>', methods=["GET"]) 
def img_render(filename): 
    print 'Called here' 
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename) 


@app.route('/api/v1.0/docs/<int:doc_id>',methods=["GET"]) 
def image_rendering(doc_id): 
    s = select([docs]).where(docs.c.id==doc_id) 
    rs = conn.execute(s).fetchone() 
    filename = str(rs[docs.c.stored_name]) 

    return url_for('img_render', filename=filename) 

HTMLテンプレートから

:私は

コードスニペット(これは動作します)アプリケーションの初期化中に、静的なフォルダを上書きしたくない

<!DOCTYPE html> 
<html> 
    <body> 
    <img src="{{url_for('img_render', filename=filename) }}" /> 
    </body> 
</html> 

テンプレートはテンプレートフォルダ自体にあります。アプリケーションの起動時に元の静的フォルダを上書きすると、ブラウザに表示された画像を取得できますが、アプリケーションの静的フォルダへの参照を変更する必要がありますORイメージをアプリケーションからの静的フォルダです。私はしたくありません。それだけでブラウザ例では、画像のパスが表示されていること間違いどのようなものです:

/api/v1.0/docs/1_20160707_121214.jpg

なく画像そのもの?コードの間違いはどこですか?フラスコv .0.11、linux 2.7を使用する。

答えて

1

image_renderingメソッドは、テンプレートレンダリングの結果を返すときに文字列(ブラウザに表示されるもの)を返します。

'mytemplate.html'を次のサンプルのhtmlテンプレートの名前に置き換えます。

from flask import render_template 

@app.route('/api/v1.0/docs/<int:doc_id>',methods=["GET"]) 
def image_rendering(doc_id): 
    s = select([docs]).where(docs.c.id==doc_id) 
    rs = conn.execute(s).fetchone() 
    filename = str(rs[docs.c.stored_name]) 

    return render_template('mytemplate.html', filename=filename) 

ここは、Windowsで動作する単純なFlask Appです。私のd:\ tempフォルダには、ファイルtest.jpgがあります。 Flask Appに、アップロードフォルダ内のファイルを読み取るための適切な権限があることを確認します。 http://127.0.0.1:5000/api/v1.0/docs/99を参照します使用するには:templatesフォルダ内の

from flask import Flask, send_from_directory, render_template 

app = Flask(__name__) 
app.config['UPLOAD_FOLDER'] = 'd:/temp' 


@app.route('/') 
def hello_world(): 
    return 'Hello World!' 


@app.route('/api/v1.0/docs/<path:filename>', methods=["GET"]) 
def img_render(filename): 
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename=filename, mimetype='image/jpeg') 


@app.route('/api/v1.0/docs/<int:doc_id>',methods=["GET"]) 
def image_rendering(doc_id): 
    # ignore doc_id, we'll use a constant filename 
    filename = 'test.jpg' 
    return render_template('test.html', filename=filename) 


if __name__ == '__main__': 
    app.run() 

test.htmlという:

<!DOCTYPE html> 
<html> 
    <body> 
    <img src="{{url_for('img_render', filename=filename) }}" /> 
    </body> 
</html> 
+0

を私はまた、上記を試してみました。サムネイルは表示されますが、実際の画像は表示されません。 – user956424

+0

'Called here 'の代わりに' img_render'関数で関数に渡されたファイル名、 'print filename'を出力します。これはイメージの予想される名前ですか? – pjcunningham

+0

はい、ファイル名が正しく取得されました – user956424

関連する問題