Cách hoạt động của Supabase Storage
Storage dựa trên cơ sở dữ liệu Postgres và hệ thống lưu trữ đối tượng. Mỗi "bucket" là một thư mục ảo chứa tệp tin, có thể được tổ chức theo cấp bậc. Mọi thao tác đều được bảo mật thông qua Row Level Security (RLS), đảm bảo chỉ người dùng được cấp quyền mới có thể truy cập hoặc thao tác với file.
Các tính năng nổi bật
Quản lý bucket và folder
Bạn có thể tạo nhiều bucket khác nhau để phân loại tài nguyên, ví dụ:avatars, documents, images. Bên trong mỗi bucket, folder giúp tổ chức file theo danh mục hoặc người dùng.
Upload file
Storage hỗ trợ upload file trực tiếp từ client, kèm theo metadata như tên file, kích thước, loại MIME. Bạn có thể upload nhiều file cùng lúc và kiểm soát kích thước tối đa.Tải xuống và truy cập
Mỗi file được gán URL duy nhất, có thể public hoặc private. URL private yêu cầu token JWT hợp lệ để truy cập, giúp bảo mật dữ liệu nhạy cảm.Xóa và di chuyển
Bạn có thể xóa file hoặc folder rỗng. Việc di chuyển file giữa các folder cũng đơn giản thông qua API.Quyền truy cập (ACL)
Storage sử dụng chính sách Row Level Security của Postgres. Bạn định nghĩa policy để kiểm soát ai có thể upload, download, xóa file. Ví dụ: chỉ user đã đăng nhập mới được upload avatar, hoặc chỉ chủ sở hữu mới được xóa file của mình.Tối ưu hình ảnh
Storage tích hợp sẵn các tham số query string để resize, crop, thay đổi chất lượng hình ảnh trên bay. Ví dụ:
- ?width=200 - thay đổi chiều rộng
- ?height=300 - thay đổi chiều cao
- ?format=webp - chuyển định dạng
- ?quality=80 - điều chỉnh chất lượng
Điều này giúp giảm dung lượng và tăng tốc độ tải trang.
Quảng cáo
300x250 In-Content Advertisement
Ví dụ thực tế
Upload avatar cho user
const { data, error } = await supabase.storage
.from('avatars')
.upload('user123/profile.jpg', file, {
contentType: 'image/jpeg',
upsert: false
})
Tải ảnh với resize
const url = ${baseUrl}/avatars/user123/profile.jpg?width=200&height=200&format=webp
Kiểm tra quyền truy cập
-- Policy cho phép user upload avatar của chính mình
CREATE POLICY "Users can upload own avatars" ON storage.objects
FOR INSERT WITH CHECK (
bucket_id = 'avatars' AND
auth.role() = 'authenticated' AND
storage.foldername('avatars', id) = auth.uid()
);
Lưu ý khi sử dụng
- Giới hạn kích thước file upload mặc định là 50MB, có thể điều chỉnh trong config. - Bucket không thể xóa nếu chứa file hoặc folder con. - Nên backup dữ liệu quan trọng vì Storage không tự động backup. - Cân nhắc CDN nếu traffic cao để giảm latency.
Kết luận
Supabase Storage cung cấp giải pháp toàn diện cho việc lưu trữ file và hình ảnh, từ quản lý bucket, upload/download an toàn, resize hình ảnh tự động, đến kiểm soát quyền truy cập chi tiết. Với tích hợp sẵn trong Supabase, bạn tiết kiệm thời gian thiết lập và có hệ thống mở rộng tốt cho ứng dụng.