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

如何使用Postman向Flask服务器发送图片?报错问题求助

解决Postman向Flask服务器上传图片的405/400错误问题

我来帮你搞定这个Postman上传Flask的问题,之前浏览器能用但Postman不行,大概率是路由请求方法配置不对,或者Postman的请求格式没设置正确,咱们一步步来排查解决:

1. 先检查Flask路由的请求方法配置

浏览器能正常访问/upload并上传,说明你的路由肯定处理了GET请求(用来返回上传页面),但很可能没正确配置POST请求的支持,或者路由拆分得有问题。

举个正确的路由写法,把GET和POST逻辑合并在同一个路由里:

from flask import Flask, render_template, request, jsonify

app = Flask(__name__)

@app.route('/upload', methods=['GET', 'POST'])  # 必须同时指定GET和POST
def upload_handler():
    if request.method == 'GET':
        # 给浏览器返回上传页面
        return render_template('upload.html')
    elif request.method == 'POST':
        # 处理Postman或浏览器的上传请求
        # 第一步:检查请求里有没有文件
        if 'file' not in request.files:
            return jsonify({"error": "请求里没包含文件部分"}), 400
        file = request.files['file']
        # 第二步:检查是否选了文件
        if file.filename == '':
            return jsonify({"error": "没有选择要上传的文件"}), 400
        # 第三步:保存文件(示例逻辑)
        if file:
            file.save(f"./uploads/{file.filename}")
            return jsonify({"message": f"文件 {file.filename} 上传成功"}), 200
    # 其他请求方法直接返回405
    return jsonify({"error": "不允许的请求方法"}), 405

如果你的路由只写了methods=['GET'],那Postman发POST请求就会直接报405;反之如果只写了methods=['POST'],浏览器访问GET会报错,但你说浏览器能用,所以重点确认路由是否同时支持GET和POST。

2. Postman的正确请求设置(关键!)

出现400错误,90%是Postman的请求格式没搞对,一定要按下面的步骤来:

  • 请求方法选POST,URL填你的Flask服务地址,比如http://localhost:5000/upload
  • 切换到Body标签,选择form-data格式(这和浏览器表单上传的multipart/form-data一致,不能选raw、x-www-form-urlencoded这些)
  • 键名要和Flask代码里request.files['xxx']的xxx完全一致,比如代码里是'file',Postman的Key就填file,然后把Type改成File,点击Value的选择文件按钮,选你要上传的图片
  • 不要手动设置Content-Type请求头!Postman会自动帮你生成正确的multipart/form-data头,手动设置反而容易出错

3. 额外调试技巧(如果还是有问题)

可以在Flask代码里加几行打印,看看请求的细节:

@app.route('/upload', methods=['GET', 'POST'])
def upload_handler():
    print(f"当前请求方法: {request.method}")
    print(f"请求里的文件列表: {request.files}")
    print(f"请求Content-Type: {request.content_type}")
    # 后续逻辑...

然后启动Flask看控制台输出,就能知道Postman的请求到底有没有正确携带文件,请求方法对不对。

常见坑点提醒

  • 不要用raw格式上传文件,必须用form-data
  • 键名要和代码里的对应,比如代码里是'image',Postman就不能填'file'
  • 如果你的Flask启用了CSRF保护(比如用了Flask-WTF),浏览器会自动带CSRF令牌,但Postman需要手动在form-data里加csrf_token键,值可以从浏览器上传页面的源码里复制
  • 确保Flask的uploads文件夹存在,不然保存文件会报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:39:07