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

如何在Python Flask Web应用中将文件上传至Supabase Storage

Flask 上传文件到 Supabase Storage 实现方案

前置准备

  • 安装Supabase官方Python SDK:pip install supabase
  • 提前在Supabase后台创建用于存储文件的Bucket,配置对应访问权限(测试阶段可先设为公开方便调试,生产环境按需配置RLS策略)
  • 提前获取Supabase项目的Project URL和API密钥(普通上传用anon公钥即可,涉及管理操作可使用服务角色密钥)

初始化Supabase客户端

在Flask应用配置部分初始化全局Supabase客户端,避免重复实例化:

from flask import Flask, request, redirect, flash
from supabase import create_client, Client
from werkzeug.utils import secure_filename
import os

app = Flask(__name__)
app.secret_key = os.getenv("FLASK_SECRET_KEY") # 替换为自定义Flask密钥

# Supabase配置参数,建议通过环境变量读取,不要硬编码
SUPABASE_URL = os.getenv("SUPABASE_URL")
SUPABASE_KEY = os.getenv("SUPABASE_KEY")
supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)

# 提前在Supabase后台创建的目标Bucket名称
SUPABASE_STORAGE_BUCKET = "your-bucket-name"

补全上传函数代码

@app.route('/upload', methods=['POST'])
def upload_file():
    if 'file' not in request.files:
        flash('No file part')
        return redirect('/')
    file = request.files['file']
    if file.filename == '':
        flash('No selected file')
        return redirect('/')
    filename = secure_filename(file.filename)
    
    # 上传到Supabase Storage核心逻辑
    try:
        # 读取文件二进制内容
        file_content = file.read()
        # 调用Supabase Storage上传接口
        response = supabase.storage.from_(SUPABASE_STORAGE_BUCKET).upload(
            path=filename,
            file=file_content,
            # 可选配置:自动识别文件类型,upsert设为True时可覆盖同名文件
            file_options={"content-type": file.content_type, "upsert": False}
        )

        # 公开Bucket可直接获取永久访问URL
        public_url = supabase.storage.from_(SUPABASE_STORAGE_BUCKET).get_public_url(filename)
        flash(f"上传成功,文件访问地址:{public_url}")
        return redirect('/')
    
    except Exception as e:
        flash(f"上传失败:{str(e)}")
        return redirect('/')

注意事项

  • 非公开Bucket需要调用create_signed_url方法生成有时效性的签名URL供用户访问
  • 建议提前校验上传文件的大小、类型,避免存储恶意文件
  • 可以给存储文件加上用户ID、上传日期等目录前缀,避免文件名冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:24:03