更多
图片上传配置
本项目使用 Supabase Storage 处理图片上传。配置完成后,任何需要图片上传的功能(联系表单、用户头像等)都可以使用同一套基础设施。
目前图片上传用于 联系表单(/contact),用户提交反馈或 bug 报告时可以附带截图。
配置步骤
1. 创建 Storage Bucket
进入 Supabase Dashboard → Storage → New bucket:
- Name:根据用途命名(如
contact-attachments) - Public bucket:开启(如果图片需要公开访问,例如通知邮件中的图片)
- Restrict file size:
5(MB)—— 可根据需求调整 - Restrict MIME types:
image/jpeg, image/png, image/gif, image/webp
2. 添加 RLS 策略
进入 Supabase Dashboard → SQL Editor,执行:
CREATE POLICY "Allow public uploads" ON storage.objects
FOR INSERT WITH CHECK (bucket_id = 'your-bucket-name');
CREATE POLICY "Allow public reads" ON storage.objects
FOR SELECT USING (bucket_id = 'your-bucket-name');将 your-bucket-name 替换为你实际创建的 bucket 名称。
联系表单示例
/contact 页面使用名为 contact-attachments 的 bucket,支持:
- 文件选择器 —— 点击选择图片
- 粘贴上传 —— Ctrl+V 直接粘贴剪贴板截图
- 每次提交最多 3 张图片,每张 5MB
- 支持格式:JPEG、PNG、GIF、WebP
图片 URL 保存在 contact_submissions 表的 metadata JSONB 字段中:
{
"referer": "https://yoursite.com/contact",
"attachments": [
"https://xxx.supabase.co/storage/v1/object/public/contact-attachments/xxx/image.png"
]
}通知邮件中会显示可点击的图片缩略图。
存储用量
Supabase 免费版提供 1GB 存储空间。按每张截图约 200-500KB 计算,可以存储数千张图片,大多数项目完全够用。
如果需要更多存储空间,有以下方案:
- 升级 Supabase 套餐 —— 最简单的方式,Pro 版提供 100GB 存储。
- 第三方对象存储 —— 将 Supabase Storage 替换为 Cloudflare R2(无出站流量费)、AWS S3、阿里云 OSS 等服务。只需在代码中将上传逻辑替换为对应服务商的 SDK。
- 图片压缩 —— 上传前对图片进行压缩或转换为 WebP 格式,减少单张文件体积,延长现有存储空间的使用寿命。