AlfyChat
Langage :

Médias

Upload multipart vers le CDN géo-distribué et téléchargement via les URLs de distribution.

Upload — /api/media/upload

POST
/api/media/upload/:type

Uploader — :type = avatars | banners | icons | attachments — query: ?location=EU|US

Upload via curl
bash
# Avatar (EU)
curl -X POST "https://gateway.alfychat.app/api/media/upload/avatars?location=EU" \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@mon-avatar.png"

# Pièce jointe
curl -X POST "https://gateway.alfychat.app/api/media/upload/attachments" \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@document.pdf"
Upload avec JavaScript (FormData)
js
const formData = new FormData();
formData.append('file', fileInput.files[0]);

const res = await fetch(
  'https://gateway.alfychat.app/api/media/upload/avatars?location=EU',
  {
    method:  'POST',
    headers: { 'Authorization': `Bearer ${token}` },
    body:    formData,
    // Ne PAS définir Content-Type manuellement (boundary auto)
  }
);
const { url, path } = await res.json();
Réponse upload
json
{
  "url":  "https://gateway.alfychat.app/api/media/EU/media-eu-1/avatars/user123-abc123.webp",
  "path": "avatars/user123-abc123.webp"
}

Types et limites

avatars / banners / icons : PNG, JPG, WEBP, GIF — max 10 MB — converti en WEBP automatiquement.
attachments : tous types — max 25 MB (utilisateurs) / 100 MB (bots certifiés).

Téléchargement — CDN géo-distribué

GET
/api/media/:location/:serviceId/:folder/:filename

Télécharger — :location = EU | US · :serviceId = id instance media

GET
/uploads/:folder/:filename

URL legacy — redirigée automatiquement vers le service media

CDN géographique

Les médias sont stockés sur l'instance la plus proche de l'utilisateur (EU ou US). Les URLs contiennent le location et l'ID du service pour un routing direct sans lookup Redis.