如何在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
相关产品推荐
相关产品推荐

