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

Flask中从表单获取上传图片文件名及读取的问题

解决Flask后端获取上传图片文件名及读取问题

你的问题核心是文件上传的数据不在request.form里,而是存放在request.files对象中,这也是你用request.form.values()拿不到数据的原因。下面是完整的解决步骤:

1. 确保前端表单配置正确

前端表单必须设置enctype="multipart/form-data",否则后端无法解析文件上传数据。示例HTML代码:

<form method="POST" enctype="multipart/form-data">
  <input type="file" name="uploaded_image" accept="image/*">
  <button type="submit">上传并处理</button>
</form>

注意:input标签的name属性(这里是uploaded_image)要和后端获取时的名称完全一致。

2. 后端Flask代码处理逻辑

获取文件对象与文件名

用request.files.get('uploaded_image')获取上传的文件对象,通过file.filename直接拿到文件名:

from flask import Flask, request
import cv2
import numpy as np
from io import BytesIO
from werkzeug.utils import secure_filename

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def handle_upload():
    if request.method == 'POST':
        # 获取上传的文件对象
        file = request.files.get('uploaded_image')
        if not file or file.filename == '':
            return '未选择有效图片'
        
        # 安全获取文件名(避免路径遍历攻击)
        filename = secure_filename(file.filename)
        print(f"上传的文件名:{filename}")

        # 用OpenCV读取图片(无需保存到磁盘,直接从内存读取)
        file.seek(0)  # 重置文件指针位置
        file_bytes = np.asarray(bytearray(file.read()), dtype=np.uint8)
        img = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR)
        
        # 这里可以添加你的图片处理逻辑
        if img is not None:
            print(f"图片读取成功,尺寸:{img.shape}")
            return f"图片 {filename} 处理完成,尺寸:{img.shape}"
        else:
            return '图片读取失败'
    return '''
    <form method="POST" enctype="multipart/form-data">
      <input type="file" name="uploaded_image" accept="image/*">
      <button type="submit">上传并处理</button>
    </form>
    '''

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

关键说明

  • request.files是Flask专门用于处理文件上传的对象,只有普通文本字段才会存放在request.form中。
  • 使用secure_filename可以过滤掉文件名中的危险字符,避免恶意路径遍历攻击,生产环境必须加上。
  • 如果需要将图片保存到磁盘,可调用file.save(f'保存目录/{filename}'),注意先确保保存目录存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:12:10