Supabase › Stockage de fichiers (Buckets)
Guide complet sur le stockage de fichiers Supabase : créez et sécurisez vos buckets pour gérer les uploads de fichiers de votre application (dashboard, SQL, client JS).
Supabase ne s’arrête pas à la gestion de base de données, à l’API auto-générée et à l’authentification. Il propose également un système de stockage et de distribution de fichiers à travers des conteneurs sécurisés nommés « buckets ».
Le stockage de fichiers avec Supabase
Supabase propose un système de stockage de fichiers à travers des conteneurs sécurisés nommés « buckets ».
Ces buckets ne sont ni plus ni moins que des dossiers sur un serveur géré par Supabase, généralement hébergés sur l’infrastructure cloud Amazon S3.
- ☁️ Amazon gère les serveurs et les données
- 🔒 Supabase gère les accès et les politiques de sécurité
Ces conteneurs peuvent être configurés avec des RLS policies pour restreindre leur accès.
Supabase permet également de définir des restrictions sur les fichiers stockés dans les buckets, notamment :
- Taille maximale (en
Ko,Mo, etc.) - Types de fichiers autorisés (ex : images, videos, etc.)
Les buckets Supabase
Un bucket est un conteneur sécurisé nommé qui permet de stocker des fichiers. Il permet de rendre son contenu public ou privé et intègre une gestion des permissions avancée via la configuration de RLS policies.
Créer un bucket
Il existe plusieurs façons de créer un bucket. Je vous présente dans cet article les trois principales : via le dashboard, via le code SQL ou via n’importe quel SDK, tel que le client JS Supabase.
Via le dashboard
- Connectez-vous à votre projet Supabase.
- Allez dans
Storage. - Cliquez sur
New bucket. - Donnez un nom à votre bucket et choisissez s’il doit être publique ou privé.
- Cliquez sur
Create bucket.
Via le code SQL
Les buckets Supabase sont gérés dans une table nommée buckets appartenant au schéma storage de Supabase.
INSERT INTO storage.buckets (id, name, public) VALUES ('mon-bucket', 'mon-bucket', true);- Sur la documentation officielle, Supabase recommande de définir une valeur identique pour
idetname. - Le 3 ème argument indique si le bucket est publique ou privé.
Via le client JS
Le client JS Supabase permet de créer un bucket avec la méthode createBucket de l’instance supabase.storage.
const { data, error } = await supabase.storage.createBucket('mon-bucket', {
public: true,
allowedMimeTypes: ['image/png'],
fileSizeLimit: '500KB',
})Les options disponibles sont :
public: indique si le bucket est public ou privé.allowedMimeTypes: liste des types de fichiers autorisés.fileSizeLimit: limite de taille des fichiers autorisés.
Supprimer un bucket
Via le dashboard
- Connectez-vous à votre projet Supabase.
- Allez dans
Storage. - Cliquez sur l’icône
⁝à droite du bucket que vous souhaitez supprimer. - Cliquez sur
Delete bucket.
Via le code SQL
Les buckets Supabase sont gérés dans une table nommée buckets appartenant au schéma storage de Supabase.
DELETE FROM storage.buckets WHERE id = 'mon-bucket';Via le client JS
Le client JS Supabase permet de supprimer un bucket avec la méthode deleteBucket de l’instance supabase.storage.
const { data, error } = await supabase.storage.deleteBucket('mon-bucket')Gérer les fichiers Supabase
Vous souhaitez héberger des fichiers tels que des images, des vidéos ou des documents pour votre application web ? Supabase vous permet de le faire de manière sécurisée et optimisée.
Cela peut se faire directement via le dashboard à la manière de n’importe quel service de stockage de fichiers ou encore via un SDK Supabase.
Uploader un fichier
Via le dashboard
- Connectez-vous à votre projet Supabase.
- Allez dans
Storage. - Cliquez sur le bucket dans lequel vous souhaitez uploader un fichier.
- Cliquez sur
Upload filesou faites simplement glisser et déposez un fichier dans la zone de drop.
Via le client JS
Le client JS Supabase permet d’uploader des fichiers dans un bucket avec la méthode upload de l’instance supabase.storage.
const logoFile = event.target.files[0]
const { data, error } = await supabase.storage.from('mon-bucket').upload('brand/logo.png', logoFile)brand/logo.png: le chemin et le nom du fichier dans le bucket. Si le nom du fichier est préfixé par un dossier, il sera créé automatiquement. Nous aborderons la gestion des dossiers plus en détail en fin de chapitre 👇logoFile: le fichier à uploader (Blob,File,FormData, etc.).
Par défaut, le fichier uploadé est mis en cache pendant 1 heure dans le navigateur et le CDN Supabase.
Il est également possible de spécifier l’option upsert pour mettre à jour un fichier existant.
const { data, error } = await supabase.storage.from('mon-bucket').upload('brand/logo.png', logoFile, {
upsert: true
})Récupérer un fichier
Quand on cherche à récupérer des fichiers sur Supabase, la méthode varie si le bucket est public ou privé.
Bucket public
Les fichiers stockés dans des buckets Supabase publics sont accessibles via l’URL suivante :
https://<project_id>.supabase.co/storage/v1/object/public/<bucket>/<asset-name>Néanmoins, vous avez aussi la possibilité de générer ces URLs via le client JS Supabase.
Le client JS Supabase permet de récupérer des fichiers publics dans un bucket avec la méthode getPublicUrl() de l’instance supabase.storage.
const { data, error } = await supabase.storage.from('mon-bucket').getPublicUrl('brand/logo.png')Bucket privé
Si le bucket est privé, il faudra :
- Signer une URL temporaire côté serveur, par exemple avec des Edge Functions.
- Faire une requête
GETsur l’URLhttps://<project_id>.supabase.co/storage/v1/object/public/<bucket>/<asset-name>en incluant le header d’autorisation de l’utilisateur.
Nous nous intéresserons ici à la signature d’une URL temporaire avec la méthode createSignedUrl() afin de rendre le fichier accessible temporairement.
const { data, error } = await supabase.storage.from('mon-bucket').createSignedUrl('brand/logo.png', 60)60 : le délai d’expiration de la signature en secondes. Au-delà de ce délai, le fichier sera inaccessible.
Télécharger un fichier
Pour télécharger une image public ou privée, il faudra ajouter l’option download à la méthode getPublicUrl() ou createSignedUrl() selon la visibilité du bucket :
Télécharger un fichier public
Si le fichier est public, il suffit d’appeler la méthode getPublicUrl() avec l’option download pour télécharger le fichier :
const { data, error } = await supabase.storage.from('mon-bucket').getPublicUrl('brand/logo.png', { download: true })Télécharger un fichier privé
Si le fichier est privé, il suffit d’appeler la méthode createSignedUrl() avec l’option download pour télécharger le fichier :
const { data, error } = await supabase.storage.from('mon-bucket').createSignedUrl('brand/logo.png', 60, { download: true })Supprimer un fichier
Vous pouvez supprimer un fichier via le dashboard Supabase ou via le client JS Supabase.
Via le dashboard
- Connectez-vous à votre projet Supabase.
- Allez dans
Storage. - Cliquez sur le bucket dans lequel se situe le/les fichier(s) à supprimer.
- Cliquez sur
Delete.
Via le client JS
Le client JS Supabase permet de supprimer un ou plusieurs fichiers en utilisant la méthode remove().
const { data, error } = await supabase.storage.from('mon-bucket').remove(['brand/logo.png'])Cette méthode attend en argument un tableau de fichiers à supprimer, incluant le chemin et le nom du fichier.
Organiser ses fichiers dans des dossiers
Les dossiers permettent de mieux organiser les fichiers au sein des buckets.
Les dossiers peuvent être créés, renommés et supprimés via le dashboard Supabase ou lors de l’upload de fichiers, notamment via le client JS.
Via le dashboard
- Connectez-vous à votre projet Supabase.
- Allez dans
Storage. - Cliquez sur le bucket que vous souhaitez organiser.
- A Créer un dossier : Cliquez sur
Create folder. - B Renommer un dossier : Cliquez (clic droit) sur le dossier puis cliquez sur
Rename. - C Supprimer un dossier : Cliquez (clic droit) sur le dossier puis cliquez sur
Delete.
Via le client JS
Comme vu précédemment, le client JS Supabase permet de créer un dossier en préfixant le nom du fichier par le nom du/des dossier(s) lors de l’upload.
const { data, error } = await supabase.storage.from('mon-bucket').upload('brand/logo.png', logoFile)Ici, le dossier 📂 brand sera créé automatiquement s’il n’existe pas.
Copier un fichier, déplacer un fichier… de nombreuses autres actions sont possibles sur les fichiers uploadés. Je vous invite à explorer cela en profondeur dans la documentation officielle pour devenir un boss du stockage avec Supabase.
Avec une gestion des fichiers couplée au mécanisme de sécurisation RLS, Supabase permet de stocker des fichiers de manière sécurisée et optimisée. 🚀