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

如何在Flask中从AJAX POST请求获取Base64图片数据

解决AJAX发送Base64图片到Flask后端并保存的问题

问题核心

你当前代码的关键错误是后端数据获取方式不对:前端通过AJAX发送的是Form Data格式的Base64字符串,后端却用request.files["image"]尝试获取(这是处理文件上传的专用方式),导致无法正确拿到数据。


前端代码(微调补充)

你的前端代码已经正确提取了Base64字符串并发送,这里补充回调方便调试:

var dataURL = canvas.toDataURL('image/jpeg');
var base64 = dataURL.replace(/^data:image\/(png|jpeg);base64/, "");
console.log(base64);

$.ajax({
  url: "http://127.0.0.1:5000/",
  type: "POST",
  data: { 
    'image': base64
  },
  success: function(response) {
    console.log("图片上传成功:", response);
  },
  error: function(err) {
    console.error("上传失败:", err);
  }
});

后端代码修正(核心改动)

改用request.form获取Base64字符串,解码后保存为本地图片:

from flask import Flask, request
import base64

app = Flask(__name__)

@app.route("/", methods=["GET", "POST"])
def index():
    if request.method == "POST":
        # 获取前端传来的Base64字符串
        base64_str = request.form.get('image')
        if not base64_str:
            return "未接收到图片数据", 400
        
        try:
            # 解码Base64为二进制图片数据
            img_data = base64.b64decode(base64_str)
            # 保存到本地,可自行修改文件名和路径
            with open("uploaded_image.jpg", "wb") as f:
                f.write(img_data)
            return "图片保存成功"
        except Exception as e:
            return f"保存失败: {str(e)}", 500
    return "请通过POST请求上传图片"

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

关键说明

  • 前端未设置contentType: 'application/json',AJAX默认以application/x-www-form-urlencoded格式发送数据,后端需用request.form获取。
  • Base64字符串必须解码为二进制数据,才能写入图片文件。
  • 异常捕获可避免无效Base64导致程序崩溃,同时给前端返回明确的错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:25:41