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

Flask应用图片上传校验:存在性与格式验证问题修复需求

Flask /VIT_model路由的文件上传校验逻辑修复

以下是修正后的完整路由代码,包含有效的文件存在校验和格式校验逻辑:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/VIT_model', methods=['POST'])
def vit_model():
    # 校验是否存在上传文件字段
    if 'file' not in request.files:
        return jsonify({'error': '无文件上传'}), 400
    
    file = request.files['file']
    # 校验是否选择了有效文件(避免文件名为空的情况)
    if file.filename == '':
        return jsonify({'error': '未选择有效文件'}), 400
    
    # 校验文件格式
    allowed_extensions = {'png', 'jpg', 'jpeg'}
    # 提取文件后缀并转为小写,避免大小写匹配问题
    try:
        file_extension = file.filename.rsplit('.', 1)[-1].lower()
    except IndexError:
        # 处理无后缀的文件
        return jsonify({'error': '文件无有效后缀,仅支持png、jpg、jpeg格式'}), 400
    
    if file_extension not in allowed_extensions:
        return jsonify({'error': f'文件格式无效,仅支持{", ".join(allowed_extensions)}格式'}), 400
    
    # 这里添加你的VIT模型处理逻辑
    # 比如读取文件、运行模型等
    # ...
    
    return jsonify({'message': '文件校验通过,模型处理完成'})

关键逻辑说明

  • 文件存在校验:
    用'file' not in request.files判断前端是否上传了名为file的文件字段,这是Flask中判断文件是否存在的标准方式——如果前端没传这个字段,直接取request.files['file']会抛出KeyError,所以必须先做这个判断。另外额外处理了文件名为空的情况(部分浏览器下用户选择文件后可能出现此问题)。
  • 文件格式校验:
    通过rsplit('.', 1)[-1]提取文件后缀,转为小写是为了兼容.PNG、.JPG这类大写后缀的文件;添加try-except处理无后缀的文件(比如文件名是test而不是test.png),确保所有异常情况都能触发错误提示。

常见失效原因(对应之前的问题)

  1. 之前可能直接尝试获取request.files['file']再判断是否为空,忽略了字段不存在的情况,导致抛出KeyError而非返回错误提示。
  2. 格式校验时未统一转为小写,导致大写后缀的合法文件被误判。
  3. 未处理无后缀或文件名为空的边缘情况,导致部分错误无法触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:36:08