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),确保所有异常情况都能触发错误提示。
常见失效原因(对应之前的问题)
- 之前可能直接尝试获取
request.files['file']再判断是否为空,忽略了字段不存在的情况,导致抛出KeyError而非返回错误提示。 - 格式校验时未统一转为小写,导致大写后缀的合法文件被误判。
- 未处理无后缀或文件名为空的边缘情况,导致部分错误无法触发。
内容的提问来源于stack exchange,提问作者IAmACSM12
相关产品推荐
相关产品推荐

