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/:typeUploader — :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).
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/:filenameTélécharger — :location = EU | US · :serviceId = id instance media
GET
/uploads/:folder/:filenameURL 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.