导读:本期聚焦于小伙伴创作的《Flask应用中如何实现图片动态更新与上传,同时完成客户端定时刷新和服务器端文件管理》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Flask应用中如何实现图片动态更新与上传,同时完成客户端定时刷新和服务器端文件管理》有用,将其分享出去将是对创作者最好的鼓励。

在Flask应用开发中,图片动态更新与上传是常见需求,客户端定时刷新能及时获取最新图片,服务器端文件管理则保障存储资源合理利用,下面介绍完整实现方案。

Flask应用中如何实现图片动态更新与上传,同时完成客户端定时刷新和服务器端文件管理

服务器端实现

基础环境准备

首先需要安装Flask依赖,同时导入必要的模块,用于处理文件上传、路径操作和定时清理任务。

from flask import Flask, request, jsonify, send_from_directory
import os
import time
from datetime import datetime

app = Flask(__name__)
# 配置上传文件存储目录
UPLOAD_FOLDER = 'static/uploads'
# 允许上传的图片格式
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
# 单张图片最大大小限制为5MB
app.config['MAX_CONTENT_LENGTH'] = 5 * 1024 * 1024
# 确保上传目录存在
if not os.path.exists(UPLOAD_FOLDER):
    os.makedirs(UPLOAD_FOLDER)

文件上传接口开发

实现接收客户端上传的图片,保存到指定目录,同时返回图片的访问路径,方便客户端后续获取。

def allowed_file(filename):
    # 判断文件后缀是否在允许范围内
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/upload', methods=['POST'])
def upload_image():
    if 'file' not in request.files:
        return jsonify({'code': 400, 'msg': '未检测到上传文件'})
    file = request.files['file']
    if file.filename == '':
        return jsonify({'code': 400, 'msg': '未选择文件'})
    if file and allowed_file(file.filename):
        # 生成唯一文件名,避免重复
        timestamp = int(time.time())
        file_ext = file.filename.rsplit('.', 1)[1].lower()
        new_filename = f'img_{timestamp}.{file_ext}'
        file_path = os.path.join(UPLOAD_FOLDER, new_filename)
        file.save(file_path)
        # 返回图片可访问路径
        image_url = f'/static/uploads/{new_filename}'
        return jsonify({'code': 200, 'msg': '上传成功', 'data': {'url': image_url}})
    return jsonify({'code': 400, 'msg': '不支持的文件格式'})

图片访问与旧文件清理

提供图片访问接口,同时实现定时清理超过7天的旧图片,避免存储空间被无效文件占用。

@app.route('/static/uploads/')
def get_uploaded_image(filename):
    return send_from_directory(UPLOAD_FOLDER, filename)

def clean_old_images():
    # 清理7天前的旧图片
    current_time = time.time()
    for filename in os.listdir(UPLOAD_FOLDER):
        file_path = os.path.join(UPLOAD_FOLDER, filename)
        if os.path.isfile(file_path):
            # 获取文件修改时间
            file_mtime = os.path.getmtime(file_path)
            # 7天对应的秒数
            if current_time - file_mtime > 7 * 24 * 3600:
                os.remove(file_path)
                print(f'已清理旧文件: {filename}')

# 可以在应用启动时执行一次清理,也可以配合定时任务框架定期执行
clean_old_images()

客户端实现

图片上传功能

使用原生JavaScript实现图片选择、上传的交互逻辑,上传成功后记录返回的图片路径。

<div class="upload-container">
    <input type="file" id="imageInput" accept="image/png,image/jpg,image/jpeg,image/gif">
    <button onclick="uploadImage()">上传图片</button>
    <p id="uploadTip"></p>
</div>
<script>
function uploadImage() {
    const input = document.getElementById('imageInput');
    const file = input.files[0];
    if (!file) {
        document.getElementById('uploadTip').innerText = '请先选择图片';
        return;
    }
    const formData = new FormData();
    formData.append('file', file);
    fetch('/upload', {
        method: 'POST',
        body: formData
    })
    .then(res => res.json())
    .then(data => {
        if (data.code === 200) {
            document.getElementById('uploadTip').innerText = '上传成功,图片路径:' + data.data.url;
            // 记录当前最新图片路径,用于刷新展示
            localStorage.setItem('latestImageUrl', data.data.url);
        } else {
            document.getElementById('uploadTip').innerText = data.msg;
        }
    })
    .catch(err => {
        document.getElementById('uploadTip').innerText = '上传失败,请重试';
    });
}
</script>

客户端定时刷新图片

实现定时向服务器请求最新图片路径,或者直接使用本地记录的最新路径刷新图片展示,确保客户端能看到最新的图片内容。

<div class="image-show">
    <img id="showImg" src="" alt="展示图片">
</div>
<script>
// 定时刷新图片,每3秒执行一次
setInterval(() => {
    const latestUrl = localStorage.getItem('latestImageUrl');
    if (latestUrl) {
        // 添加时间戳避免浏览器缓存旧图片
        const img = document.getElementById('showImg');
        img.src = latestUrl + '?t=' + new Date().getTime();
    }
}, 3000);

// 页面加载时初始化图片
window.onload = function() {
    const latestUrl = localStorage.getItem('latestImageUrl');
    if (latestUrl) {
        document.getElementById('showImg').src = latestUrl;
    }
};
</script>

注意事项

  • 生产环境中需要添加更严格的文件校验,避免恶意文件上传
  • 文件存储目录建议做好权限控制,避免被直接访问篡改
  • 定时刷新间隔可以根据实际需求调整,避免过于频繁请求增加服务器压力
  • 如果上传图片量较大,可以考虑将文件存储到对象存储服务,而非本地服务器

以上方案完整实现了Flask应用中的图片动态更新与上传、客户端定时刷新和服务器端文件管理功能,可根据实际业务需求调整细节参数。

Flask图片上传定时刷新文件管理Python修改时间:2026-06-24 21:09:39

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。