Logo Aurabase
aurabasedocuments
documents›Guides›Store and serve files (SDK)

Stockez et servez des fichiers avec le SDK JavaScript

Les flux quotidiens de aura.storage, avec les règles d'accès observées par rapport à une pile en cours d'exécution.

8 min de lecture·Niveau intermédiaire·Révisé le 12 oct. 2026
Ce texte anglais a été généré automatiquement à partir de l’original français et n’a pas encore été relu.
Cette page a été traduite automatiquement. La version anglaise fait foi.
#
Godets

1. Seaux

Un compartiment regroupe les fichiers et décide s'ils sont publics. La création et la suppression de compartiments nécessitent une clé service_role. Leur liste nécessite un utilisateur connecté ou une clé service_role ; la clé publique seule obtient 403.

server/buckets.tstypescript
await admin.storage.createBucket('avatars', { public: true })   // n'importe qui peut lire les fichiers
await admin.storage.createBucket('invoices', { public: false })  // seul leur propriétaire peut
const { data: buckets } = await admin.storage.listBuckets()

Un compartiment accepte également fileSizeLimit (en octets) et allowedMimeTypes. Un téléchargement trop volumineux renvoie 413 et un type non autorisé renvoie 400.

#
Fichiers

2. Télécharger, télécharger, lister, supprimer

files.tstypescript
const bucket = aura.storage.from('invoices')

// Upload : un Blob, un File ou un ArrayBuffer
const { data, error } = await bucket.upload(`${user.id}/2026-10.pdf`, file, {
  contentType: 'application/pdf',
})
// → { clé, bucket, url, taille, content_type, etag }

// Remplacer un fichier existant
await bucket.upload(`${user.id}/2026-10.pdf`, newFile, { upsert: true })

// Lister un dossier, télécharger, supprimer
const { data: files } = await bucket.list(user.id)
const { data: blob } = await bucket.download(`${user.id}/2026-10.pdf`)
await bucket.remove([`${user.id}/2026-10.pdf`])

À quoi s'attendre :

  • Le téléchargement d'un chemin existant renvoie 409 sauf si vous transmettez upsert: true.
  • Le téléchargement nécessite un utilisateur connecté ou une clé service_role. La clé publique seule obtient 403, même pour un compartiment public.
  • Un chemin avec .. est refusé avec 400.
  • Les chemins sont partagés dans un compartiment. Si un autre utilisateur possède déjà le chemin, vous obtenez 409. Placez les fichiers de chaque utilisateur dans leur propre dossier, tel que ${user.id}/….
#
Partager

3. Partagez un fichier

share.tstypescript
// Un fichier dans un bucket public : une URL permanente, construite sans requête
const { data } = aura.storage.from('avatars').getPublicUrl('ada.png')
// → { publicUrl : 'https://my-app.aurabase.cloud/v1/storage/avatars/ada.png' }

// Un fichier privé : un lien temporaire
const { data: signed } = await aura.storage.from('invoices').createSignedUrl(`${user.id}/2026-10.pdf`, 60)
// → { url, expires_in : 60 }

Les deux liens ont été récupérés sans aucune clé et ont renvoyé le fichier. Un lien signé cesse de fonctionner après expires_in secondes. Pour permettre à un navigateur de télécharger sans clé, un serveur émet createSignedUploadUrl(path) (un appel service_role).

#
Accès

4. Qui peut faire quoi

ActionClé publiqueUtilisateur connectéservice_role
Lire un fichier dans un bucket publicouiouioui
Lire, lister un fichier dans un bucket privénonson propriétaire seulementoui
Téléchargernonouioui
Remplacer ou supprimer un fichiernonson propriétaire seulementoui
Répertorier les bucketsnonouioui
Créer, supprimer des compartimentsnonnonoui

Le propriétaire est l'utilisateur qui a téléchargé le fichier. Dans une exécution réelle, un deuxième utilisateur ne pouvait pas répertorier, télécharger ou supprimer le fichier du premier utilisateur dans un compartiment privé, et ne pouvait pas non plus le remplacer.

#
Serveur

5. Déplacer et copier, depuis un serveur

server/organise.tstypescript
await admin.storage.copy('invoices', 'a/hello.txt', 'a/copy.txt')
await admin.storage.move('invoices', 'a/copy.txt', 'a/moved.txt')
const { data: meta } = await admin.storage.getMetadata('invoices', 'a/hello.txt')

Le redimensionnement de l'image est décrit dans la référence de stockage.

Dernière mise à jour · 12 oct. 2026