前提・実現したいこと
Pythonのflaskを使っています。アップロードした画像をローカルディレクトリのstatic/imageにtarget.jpgという名前で保存し、render_templateで用意してあるテンプレートに渡して表示したいと思っています。
コードはFlaskで画像アップローダーから拝借して少し変えています。
発生している問題・エラーメッセージ
app.run('localhost',port='8080')で実行したときは保存した画像が表示する画像に反映されているのですが、app.run()だけで実行したときにアクセスする127.0.0.1:5000では一番最初に表示した画像がそのまま残り、いくら保存する画像を変えても表示される画像が変わりませんでした。
Herokuを使って公開することを前提で作っているのでこの問題の原因、解決策があれば教えていただきたいです。
該当のソースコード
Index.py
Python
1 2from flask import Flask, render_template, request, redirect, url_for, send_from_directory, sessions 3from werkzeug.utils import secure_filename 4import sys, codecs, os 5 6sys.stdout = codecs.getwriter("utf-8")(sys.stdout) 7 8app = Flask(__name__) 9 10IMAGE_FOLDER = "./static/image/" 11ALLOWED_EXTENSIONS = {'png', 'jpg', 'gif'} 12app.config['UPLOAD_FOLDER'] = IMAGE_FOLDER 13 14def allowed_file(filename): 15 return '.' in filename and \ 16 filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS 17 18 19@app.route('/static/image/<filename>') 20def uploaded_file(filename): 21 return send_from_directory(app.config['UPLOAD_FOLDER'], filename) 22 23@app.route('/') 24def upload_page(): 25 return render_template('upload.html') 26 27@app.route('/search',methods=['GET','POST']) 28def upload(): 29 if request.method == 'POST': 30 img_file = request.files['img_file'] 31 if img_file and allowed_file(img_file.filename): 32 img_file.save(os.path.join(app.config['UPLOAD_FOLDER'], 'target.jpg')) 33 # card_name = search.main() 34 img_url = url_for('static', filename='image/target.jpg') 35 36 return render_template('search.html', img_url=img_url) 37 else: 38 return ''' <p>File extension not allowed</p>''' 39 else: 40 return redirect(url_for('upload')) 41 42if __name__ == "__main__": 43 app.debug = True 44 app.run(host = "localhost",port=8080)
upload.html
html
1{% extends "base.html" %} 2{% block content %} 3<form action="/search" method="post" enctype="multipart/form-data"> 4 <input type="file" name="img_file"> 5 <div class="preview" ></div> 6 <input type="submit" value="start upload"> 7</form> 8{% if img_url %} 9<p><img src="{{ img_url }}" width="320" height="400"></p> 10{% endif %} 11{% endblock %}
base.html
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <link rel="stylesheet" href="/static/css/bootstrap.min.css"> 6 <title>画像表示</title> 7</head> 8<body> 9 {% block content %} 10 {% endblock %} 11</body> 12</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
を使っています。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/22 03:24
2018/02/22 03:35