【发布时间】:2021-02-04 23:16:14
【问题描述】:
我创建了一个小flask网站,有2个功能:上传图片并在网站上展示。
网站总是以相同的名称image.png 保存新上传的图片,以替换之前上传的图片。当我上传一个新文件时,它会成功替换static/img 目录中的旧文件。但是,该网站继续显示旧图像。
我在 stackoverflow 上能找到的最接近的问题是 Overwriting Image with same name - Django。这里的答案建议使用信号,但没有解释为什么会这样。如果可能的话,我希望有人能澄清我做错了什么。
如何确保显示新上传的图片?
您可以使用以下信息重现我的情况。
目录结构
├── main.py
├── static
│ └── img
│ └── image.png
└── templates
└── index.html
main.py
import os
from flask import Flask, request, redirect, url_for, render_template
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'static/img/'
@app.route('/', methods=['GET', 'POST'])
def home():
if request.method == 'POST':
file = request.files['image']
filename = "image.png"
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return render_template('index.html', filename=filename)
else:
return render_template('index.html')
@app.route('/<filename>')
def display_img(filename):
"""Display image on website"""
return redirect(url_for('static', filename='img/' + filename))
if __name__ == "__main__":
app.run(debug=True)
index.html
<!-- Display Image -->
{% if filename %}
<img src="{{ url_for('display_img', filename=filename) }}" alt="alt">
{% endif %}
<!-- Upload Image Button -->
<form action="#", method="POST", enctype=multipart/form-data>
<input type="file" name="image" id="image"/>
<button type="submit" value="Submit">Submit</button>
</form>
【问题讨论】:
-
这听起来像是缓存控制问题。查看this post 以获得一些指导。您还可以尝试在
display_img内使用return redirect(url_for('static', filename='img/' + filename), code=307)重定向307。 -
@Abdou 谢谢!我禁用了烧瓶上的缓存,它起作用了!
标签: python html flask jinja2 overwrite