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

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

ただいまの
回答率

90.47%

  • Python 3.x

    10245questions

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

  • Flask

    364questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,519

eyedrops_p

score 2

 前提・実現したいこと

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

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

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

 該当のソースコード

 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)

 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 %}

 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ページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

ブラウザがキャッシュしているせいだったりしませんか。
https://stackoverflow.com/questions/45583828/python-flask-not-updating-images

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/22 12:24

    ありがとうございます!画像表示うまくできました!
    それも考えていたのですが、まだ不勉強のためよくわからず保留にしていました。。。これからは考えられることをちゃんと調べていこうと思います!

    キャンセル

  • 2018/02/22 12:35

    もしキャッシュのせいであれば、画像を保存する際に
    ファイル名_ハッシュ.img
    のように保存することで、強制的にファイル名を変化させることができます。
    ハッシュとして、ユーザー・アップロード日時などを使用できます。
    これだとファイルが溜まっていくので、ルールを決めて過去の画像を削除していく必要があります。

    キャンセル

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • Python 3.x

    10245questions

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

  • Flask

    364questions

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