Flask 应用中图片动态更新与上传:实现客户端定时刷新与服务器端文件管理


flask 应用中图片动态更新与上传:实现客户端定时刷新与服务器端文件管理

本教程详细介绍了如何在 Flask 应用中高效地显示和动态更新图片。内容涵盖 Flask 静态文件服务、HTML 模板中图片路径的正确引用、利用 J*aScript 实现客户端图片定时刷新(包括缓存处理),以及服务器端图片上传处理的完整流程,旨在帮助开发者构建具备图片管理功能的 Web 应用。

1. Flask 基础:静态文件服务与图片显示

在 Flask 应用中,静态文件(如 CSS、J*aScript、图片等)通常通过一个名为 static 的特殊文件夹来提供。在 HTML 模板中,url_for() 函数结合 static 端点是生成静态文件正确 URL 的标准方式。

1.1 项目结构

为了清晰地组织文件,建议采用以下项目结构:

.
├── app.py                  # Flask 主应用文件
├── static
│   └── images
│       └── chart.png       # 示例图片文件
└── templates
    └── chart.html          # HTML 模板文件

1.2 Flask 应用配置与路由

在 app.py 中,我们需要配置静态文件目录,并定义一个路由来渲染包含图片的 HTML 页面。

import os
from flask import Flask, render_template

app = Flask(__name__)

# 配置图片上传目录,该目录位于 'static' 文件夹下
app.config['UPLOAD_FOLDER'] = os.path.join('static', 'images')

@app.route("/")
def running():
    """根路由,简单返回应用运行状态"""
    return "<p>Website running!</p>"

@app.route("/chart")
def show_img():
    """
    显示图片的路由。
    将图片的相对路径(相对于 static 文件夹)传递给模板。
    """
    # 假设图片名为 chart.png,且位于 static/images 目录下
    # url_for('static', ...) 会自动处理 'static/' 部分
    image_path_in_static = os.path.join('images', 'chart.png')
    return render_template("chart.html", user_image=image_path_in_static)

if __name__ == "__main__":
    # 启动 Flask 应用,开启 debug 模式方便开发
    app.run(port=3000, debug=True)

1.3 HTML 模板中的图片引用

在 templates/chart.html 中,使用 url_for() 函数来引用 user_image 变量,确保图片路径正确解析。

Viggle AI Video Viggle AI Video

Powerful AI-powered animation tool and image-to-video AI generator.

Viggle AI Video 115 查看详情 Viggle AI Video
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>动态图片展示</title>
</head>
<body>
    <h1>当前图片</h1>
    <!-- 使用 url_for 结合 user_image 变量正确引用图片 -->
    @@##@@
</body>
</html>

此时,访问 http://localhost:3000/chart 路由即可在浏览器中看到 chart.png 图片。

2. 客户端定时刷新图片

当服务器端的图片文件内容发生变化,但文件名保持不变时,浏览器可能会因为缓存机制而继续显示旧图片。为了强制浏览器重新加载最新图片,我们需要利用 J*aScript 定时更新 Chart Image 标签的 src 属性,并在 URL 中添加一个唯一的查询参数(例如时间戳)来“破坏”缓存。

2.1 修改 chart.html 添加 J*aScript 刷新逻辑

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>动态图片展示</title>
</head>
<body>
    <h1>当前图片</h1>
    @@##@@

    <script>
        // 获取图片元素
        const dynamicImage = document.getElementById('dynamicImage');
        // 获取原始图片路径,用于构建新的 URL。
        // .split('?')[0] 用于移除可能已存在的查询参数。
        const originalSrc = dynamicImage.src.split('?')[0];

        // 每5秒刷新一次图片
        setInterval(() => {
            // 生成一个当前时间戳作为查询参数,强制浏览器重新加载图片,避免缓存
            const newSrc = originalSrc + '?' + new Date().getTime();
            dynamicImage.src = newSrc;
            console.log('Image refreshed:', newSrc);
        }, 5000); // 5000毫秒 = 5秒
    </script>
</body>
</html>

通过上述 J*aScript 代码,每隔 5 秒,浏览器会请求一个新的图片 URL(因为 URL 上的时间戳不同),从而绕过浏览器缓存,显示最新的图片内容。

3. 服务器端图片上传与管理

如果图片是由用户上传或服务器动态生成并需要替换现有文件,我们需要在 Flask 应用中实现文件上传功能。这涉及到接收文件、验证文件类型、安全地保存文件等步骤。

3.1 扩展 app.py:实现文件上传功能

我们需要引入 request, redirect, url_for, flash 和 werkzeug.utils.secure_filename。为了演示目的,我们使用一个全局变量 current_file 来跟踪当前显示的图片,但在生产环境中,应避免使用全局变量,而应采用数据库或会话管理来存储文件信息。

import os
from flask import Flask, render_template, request, redirect, url_for, flash
from werkzeug.utils import secure_filename # 用于安全地处理文件名

app = Flask(__name__)
app.secret_key = 'supersecretkey_for_flash_messages' # flash 消息需要 secret_key

# 配置图片上传目录
UPLOAD_FOLDER = os.path.join('static', 'images')
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'} # 允许的图片扩展名

app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER # 将配置赋值给 app.config

# 用于存储当前显示的图片文件名(仅为演示目的,生产环境应避免全局变量)
current_file = 'chart.png' # 默认图片名

def allowed_file(filename):
    """检查文件是否是允许的
Flask 应用中图片动态更新与上传:实现客户端定时刷新与服务器端文件管理Chart Image

以上就是Flask 应用中图片动态更新与上传:实现客户端定时刷新与服务器端文件管理的详细内容,更多请关注其它相关文章!


# javascript  # css  # AI-powered  # red  # 会话管理  # 路由  # ai  # app  # 浏览器  # html  # java  # 唐山市怎么开展网站建设  # 天津现代网站建设经历  # seo标签大全  # 网站建设徐州  # 关于天猫推广的网站  # 上海金山seo排名  # 西安微网站建设  # 网站建设步骤分解与整合  # 陕西抖音seo优化方式  # 咸宁网站建设外包公司  # 但在  # 是由  # 加载  # 文件上传  # 图片上传  # 上传  # 文件管理  # 全局变量  # 客户端 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 泰拉瑞亚水晶无法放置问题  键盘声音异常怎么回事_键盘异响怎么处理  《via浏览器》强制缩放网页设置方法  苹果官网国补入口在哪  安居客移动经纪人怎么设置自动回复?-安居客移动经纪人设置自动回复的方法  QQ网页版入口导航 QQ网页版在线访问通道  mysql怎么查询数据_mysql基础查询语句使用教程  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网  京东快递包裹信息查询入口 京东快递官方查询平台入口  什么是Satis,如何用它搭建一个私有的composer仓库?  c++如何实现一个简单的RPC框架_c++远程过程调用原理与实践  PySimpleGUI中实现键盘按键与按钮事件绑定教程  diskgenius分区工具如何设置Bios启动项  《广发易淘金》国债逆回购操作教程  电脑从睡眠中被自动唤醒怎么办_Windows唤醒源事件查看与禁用【解决】  夸克浏览器资源嗅探怎么用 夸克浏览器网页资源下载技巧【教程】  Python中对象引用与链表属性赋值的机制解析  CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化  Apple Music无故扣费引质疑  byrutor直接访问入口 byrutor官方游戏库  企查查官网和爱企查 企查查企业查询官网入口  哔哩哔哩黑名单怎么查看  《爱笔思画x》魔棒工具抠图教程  WooCommerce 新客户订单自动添加管理员备注教程  视频号视频怎么免费保存到相册?保存到相册需要注意什么?  VB表达式书写规则解析  我的世界官方网址入口 我的世界游戏主页直达入口  win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】  DeepSeek超全面指南:入门必看  J*aScript包管理器_Npm与Yarn对比  以下哪一个是适应长期护理制度发展而设立的新职业  windows10怎么设置电源按钮_windows10按下电源键功能修改  使用CSS :has() 选择器实现父元素样式控制:从子元素反向应用样式  mysql如何管理数据库账户_mysql数据库账户管理技巧  《蓝色星原:旅谣》坐骑获取攻略  优化 React onClick 事件处理:函数引用与箭头函数的对比  德邦快递会员怎么开通  如何定制PrimeNG Sidebar的背景颜色  QQ邮箱手机版网页版 QQ邮箱登录入口地址  J*aScript中高效处理用户输入:从Keyup事件到表单提交的优化实践  51漫画网实时入口 51漫画网页版官方免费漫画入口  Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】  qq音乐官方网站入口_qq音乐在线听歌网页版链接  铁路12306官网登录入口 铁路12306在线购票官方平台  4399正版网页版入口高清直达链接  《海底捞》点外卖方法  iphone16系列配置参数介绍  抖音火山版如何进行提现  PHP动态导航按钮:根据用户登录状态切换链接与文本  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足 

 2025-11-29

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.