Partage de Fichier Temporaire
5 min–1 h · 5 Mo max · compatible AI Agent
Comment ça marche
Chaque fichier part vers un bucket Cloudflare R2 via le point Pages Functions /api/upload, avec la durée de vie choisie. L'objet est écrit avec un horodatage expiresAt maison ; /f/<id> le lit à chaque téléchargement et renvoie 410 Gone une fois échu. Une règle de cycle de vie R2 d'un jour supprime physiquement l'objet en filet de sécurité.
Conçu pour les agents IA
Beaucoup d'agents de modèles de langage savent appeler fetch ou un outil de navigation, mais ne téléchargent pas spontanément une URL collée — ils la traitent comme une chaîne opaque. La variante Agent prompt de chaque ligne préfixe une courte instruction (« Télécharge et lis ce fichier ») dans la langue active, si bien que le modèle voit une directive claire à côté de l'URL et dégaine son outil de téléchargement.
Anti-énumération
Les identifiants d'URL font 16 caractères base62 (~95 bits d'entropie) : la probabilité de deviner un lien vivant est essentiellement nulle. En plus, chaque 404/410 sur /f/* incrémente un compteur d'échecs par IP dans KV. Après 10 échecs, l'IP rejoint une liste de blocage avec un TTL de 30 jours et se voit refuser /f/* comme /api/upload jusqu'à expiration du marqueur.
Que peut-on téléverser ?
N'importe quel fichier, jusqu'à 5 Mo. Le type n'est pas restreint parce que les téléchargements sont toujours servis avec Content-Disposition: attachment et X-Content-Type-Options: nosniff — le navigateur enregistre le fichier au lieu de l'afficher, donc un HTML/SVG/JS envoyé ne peut pas s'exécuter comme script sur cette origine.
Limites et débit
- Gratuit : 1 fichier à la fois. Plus : jusqu'à 20 fichiers par lot.
- 5 Mo par fichier (imposé par la Function d'envoi — la limite côté front n'est qu'une courtoisie).
- Durée de vie : toute valeur entre 5 minutes et 1 heure.
- Limite d'envois — anonyme : 10/min, 60/h, 160/jour (par IP) ; connecté : 10/min, 50/h, 200/jour ; Plus : 30/min, 200/h, 600/jour (par compte, insensible au CGNAT).
- Chaque fenêtre de limite (1 m / 1 h / 24 h) est ancrée sur l'envoi qui l'ouvre — pas sur minuit UTC ni sur un fuseau local. Vous disposez donc toujours du budget complet de la fenêtre, quel que soit votre point de départ.
- Quand le seau approche du plafond gratuit, les envois renvoient
503jusqu'à ce que les fichiers expirés libèrent de la place — la reprise est automatique.
Confidentialité
Considérez chaque URL comme partagée avec quiconque détient le lien, pas comme du stockage privé. L'identifiant est indevinable en pratique et la liste de blocage arrête la force brute occasionnelle, mais quiconque a l'URL peut récupérer le fichier jusqu'à expiration. Nous hachons les IP (SHA-256) avant de les utiliser comme clé KV, ne les persistons jamais sur l'objet R2, et servons chaque téléchargement avec noindex, nofollow.