質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

Python3.6 Flask0.12.2での画像表示

eyedrops
eyedrops

総合スコア0

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1回答

0評価

1クリップ

34閲覧

投稿2018/02/21 15:22

編集2022/01/12 10:58

前提・実現したいこと

Pythonのflaskを使っています。アップロードした画像をローカルディレクトリのstatic/imageにtarget.jpgという名前で保存し、render_templateで用意してあるテンプレートに渡して表示したいと思っています。
コードはFlaskで画像アップローダーから拝借して少し変えています。

発生している問題・エラーメッセージ

app.run('localhost',port='8080')で実行したときは保存した画像が表示する画像に反映されているのですが、app.run()だけで実行したときにアクセスする127.0.0.1:5000では一番最初に表示した画像がそのまま残り、いくら保存する画像を変えても表示される画像が変わりませんでした。
Herokuを使って公開することを前提で作っているのでこの問題の原因、解決策があれば教えていただきたいです。

該当のソースコード

Python

### Index.py from flask import Flask, render_template, request, redirect, url_for, send_from_directory, sessions from werkzeug.utils import secure_filename import sys, codecs, os sys.stdout = codecs.getwriter("utf-8")(sys.stdout) app = Flask(__name__) IMAGE_FOLDER = "./static/image/" ALLOWED_EXTENSIONS = {'png', 'jpg', 'gif'} app.config['UPLOAD_FOLDER'] = IMAGE_FOLDER def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS @app.route('/static/image/<filename>') def uploaded_file(filename): return send_from_directory(app.config['UPLOAD_FOLDER'], filename) @app.route('/') def upload_page(): return render_template('upload.html') @app.route('/search',methods=['GET','POST']) def upload(): if request.method == 'POST': img_file = request.files['img_file'] if img_file and allowed_file(img_file.filename): img_file.save(os.path.join(app.config['UPLOAD_FOLDER'], 'target.jpg')) # card_name = search.main() img_url = url_for('static', filename='image/target.jpg') return render_template('search.html', img_url=img_url) else: return ''' <p>File extension not allowed</p>''' else: return redirect(url_for('upload')) if __name__ == "__main__": app.debug = True app.run(host = "localhost",port=8080)

html

### upload.html {% extends "base.html" %} {% block content %} <form action="/search" method="post" enctype="multipart/form-data"> <input type="file" name="img_file"> <div class="preview" ></div> <input type="submit" value="start upload"> </form> {% if img_url %} <p><img src="{{ img_url }}" width="320" height="400"></p> {% endif %} {% endblock %}

html

### base.html <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="/static/css/bootstrap.min.css"> <title>画像表示</title> </head> <body> {% block content %} {% endblock %} </body> </html>

試したこと

@app.route('/static/image/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
この部分があるので試しに127.0.0.1:5000/static/image/{ファイル名}を開いたのですが、ファイル名がtarget.jpgのままだと別の画像が保存してあるにもかかわらず一番最初の画像のままでした。保存する名前を変えると保存した画像がきちんと表示されました。

補足情報(FW/ツールのバージョンなど)

Python3.6
Flask0.12.2
を使っています。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。