You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask表单上传文件:如何实现计数并分配连续编号

Flask表单上传文件的连续编号与数量统计

需求说明

需要实现:统计通过表单上传的所有文件数量,为每个上传文件分配连续的三位数字编号,命名格式为LOT_image_001、LOT_image_002……以此类推。

原代码问题分析

当前代码中的counter是局部变量,每次请求都会重置为0,无法实现连续计数;且命名逻辑不符合要求,只是在原文件名前加了LOT_,没有生成连续编号。另外代码缺少os模块的导入,运行会报错。

解决方案

通过扫描上传目录中已有的目标格式文件生成下一个连续编号,这种方式无需额外存储计数,更可靠且避免了持久化计数的锁问题。

修改后的Python代码

from flask import Flask, render_template, request
from werkzeug.utils import secure_filename
import os

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = './Files PDF'

# 确保上传目录存在,避免首次上传报错
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)

@app.route("/")
def upload_file():
    return render_template('form.html')

@app.route("/upload", methods=['POST'])
def uploader():
    if request.method == 'POST':
        # 扫描上传目录,统计符合命名规则的文件数量
        upload_dir = app.config['UPLOAD_FOLDER']
        existing_files = [f for f in os.listdir(upload_dir) if f.startswith('LOT_image_')]
        # 生成下一个连续编号,格式化为三位数字(自动补零)
        next_num = len(existing_files) + 1
        new_filename = f"LOT_image_{next_num:03d}"

        # 获取上传文件,可选择保留原文件后缀
        f = request.files['file']
        file_ext = os.path.splitext(secure_filename(f.filename))[1]
        # 若需保留原格式,启用下面一行;否则直接用new_filename保存
        # new_filename_with_ext = f"{new_filename}{file_ext}"
        # f.save(os.path.join(upload_dir, new_filename_with_ext))
        
        # 直接按编号命名保存文件
        f.save(os.path.join(upload_dir, new_filename))
        
        # 可选:返回当前已上传文件总数到页面
        total_count = len(existing_files) + 1
        return render_template('form.html', total_count=total_count)

if __name__ == '__main__':
    app.run("0.0.0.0",8000,threaded=True,debug=True)

修改后的form.html(支持显示上传总数)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>File Upload</title>
</head>
<body>
  {% if total_count %}
    <p>已上传文件总数:{{ total_count }}</p>
  {% endif %}
  <form action="/upload" method="POST" enctype="multipart/form-data">
    <input type="file" name="file" required>
    <input type="submit" value="上传文件">
  </form>
</body>
</html>

关键说明

  1. 目录初始化:用os.makedirs确保上传目录存在,避免首次上传时的路径不存在错误。
  2. 编号生成逻辑:筛选目录中以LOT_image_开头的文件,统计数量后加1得到下一个编号,用{next_num:03d}格式化为三位数字(自动补零)。
  3. 命名灵活性:代码提供两种命名方式——保留原文件后缀或直接用编号命名,可根据需求切换。
  4. 并发处理提示:高并发场景下可能出现编号重复,可通过文件锁或数据库存储计数解决,小流量应用无需额外处理。

内容的提问来源于stack exchange,提问作者Loric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:35:44