python - Flask - 使用相同名称覆盖图像并显示新图像
问题描述
我创建了一个小flask网站,有2个功能:上传图片并显示在网站上。
该网站始终以相同的名称保存新上传的图像image.png
,以替换之前上传的图像。当我上传新文件时,它会成功替换static/img
目录中的旧文件。但是,该网站继续显示旧图像。
我在 stackoverflow 上能找到的最接近的问题是 Overwriting Image with same name - Django。这里的答案建议使用信号,但没有解释为什么会这样。如果可能的话,我希望有人能澄清我做错了什么。
我该怎么做才能确保显示新上传的图像?
您可以使用以下信息重现我的情况。
目录结构
├── main.py
├── static
│ └── img
│ └── image.png
└── templates
└── index.html
主文件
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)
索引.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>
解决方案
正如@Abdou 在上面的评论中提到的那样,该网站正在使用缓存的图像来继续显示旧图像。在大多数情况下可能不是最佳的,但对于这种情况,通过放在app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
顶部禁用缓存可以解决问题。
app = Flask(__name__)
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
...
if __name__ == "__main__":
app.run(debug=True)
推荐阅读
- linux - cp : 没有这样的文件或目录 bash 脚本
- javascript - 编写测试以验证 jest 中的对象属性(NodeJs)
- c# - 如何使用 Xamarin Forms Shell 在 iOS 中的 Tabbar 行和图标之间添加空格?
- security - 强化令人失望的扫描行为
- python - 用负参数矢量化不完全伽马函数
- javascript - 如何在特定时间使用 rxjs 发出请求?
- html - 有没有办法将任何网站嵌入到 html 中的其他网站中?
- spring-batch - Spring Batch 对 OpenEdge 数据库的支持?
- semantic-ui - 如何阻止下拉菜单打开焦点?
- arrays - Scala,将 2d 数组添加到 3d 数组