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

如何获取Flask-WTF上传文件的最后修改时间

获取Flask-WTF上传文件的最后修改时间

嘿,这个问题我刚好处理过!Flask-WTF的FileField返回的是Werkzeug的FileStorage对象,它本身并没有直接提供文件的最后修改时间——毕竟上传的文件是从客户端发过来的,服务器默认拿不到客户端本地的文件修改时间。不过分两种场景,我给你详细说:


场景1:获取客户端本地文件的最后修改时间

服务器本身没办法直接拿到客户端文件的修改时间,得靠前端把这个信息一起提交过来。这里可以用JavaScript读取文件的lastModified属性,然后通过隐藏字段传给后端。

步骤:

  • 修改表单:在Flask-WTF表单里加一个HiddenField用来存修改时间
  • 前端处理:用JS监听文件选择事件,获取选中文件的lastModified,填入隐藏字段
  • 后端接收:在视图里从表单的隐藏字段拿到这个时间戳,转成你需要的格式

代码示例:

表单定义(forms.py)
from flask_wtf import FlaskForm
from wtforms import FileField, SubmitField, HiddenField
from wtforms.validators import DataRequired

class UploadForm(FlaskForm):
    image = FileField('上传图片', validators=[DataRequired()])
    file_mtime = HiddenField('文件修改时间')
    submit = SubmitField('上传')
前端模板(upload.html)
<form method="POST" enctype="multipart/form-data">
    {{ form.hidden_tag() }}
    {{ form.image.label }} {{ form.image() }}
    {{ form.file_mtime() }}
    {{ form.submit() }}
</form>

<script>
// 监听文件选择事件
document.querySelector('#image').addEventListener('change', function(e) {
    const file = e.target.files[0];
    if (file) {
        // 把文件的最后修改时间戳填入隐藏字段(注意JS时间戳是毫秒级)
        document.querySelector('#file_mtime').value = file.lastModified;
    }
});
</script>
后端视图(app.py)
from flask import Flask, render_template
from forms import UploadForm
import datetime

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key-here'

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    form = UploadForm()
    if form.validate_on_submit():
        # 将毫秒级时间戳转成datetime对象
        mtime_timestamp = int(form.file_mtime.data) / 1000
        mtime = datetime.datetime.fromtimestamp(mtime_timestamp)
        print(f"客户端文件最后修改时间:{mtime}")
        
        # 这里可以继续处理文件保存逻辑
        # image_file = form.image.data
        # image_file.save('path/to/save/image.jpg')
        return "上传成功!"
    return render_template('upload.html', form=form)

if __name__ == '__main__':
    app.run(debug=True)

场景2:文件保存到服务器后,获取服务器上文件的修改时间

如果是想获取文件保存到服务器本地后的最后修改时间,那和普通文件一样,用os.path.getmtime()就可以了,前提是你已经把文件保存到了服务器的某个路径下。

代码示例(app.py)

import os
from flask import Flask, render_template
from forms import UploadForm
import datetime

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key-here'
UPLOAD_FOLDER = 'uploads'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    form = UploadForm()
    if form.validate_on_submit():
        image_file = form.image.data
        # 生成服务器本地的保存路径
        save_path = os.path.join(UPLOAD_FOLDER, image_file.filename)
        # 保存文件到服务器
        image_file.save(save_path)
        
        # 获取服务器上文件的最后修改时间
        mtime_timestamp = os.path.getmtime(save_path)
        mtime = datetime.datetime.fromtimestamp(mtime_timestamp)
        print(f"服务器文件最后修改时间:{mtime}")
        
        return "上传成功!"
    return render_template('upload.html', form=form)

注意事项:

  • 客户端的修改时间依赖前端JS的支持,主流浏览器都兼容File.lastModified,但旧浏览器可能存在兼容性问题
  • 服务器上的修改时间是文件保存到服务器后的时间,如果你后续修改了这个文件,getmtime会返回最新的修改时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:29:36