# Déployer une drop box

> Un petit WeTransfer sur votre propre bucket : déposez un fichier, obtenez un code et un lien, récupérez-le sur n’importe quel appareil jusqu’à expiration. Un template Next.js bâti sur s3nd, déployé sur Vercel en un clic.

Canonical: https://s3nd.sh/fr/drop · Markdown: https://s3nd.sh/fr/drop.md · English: https://s3nd.sh/drop

Déposez un fichier, obtenez un code de huit caractères et un lien, récupérez-le sur n’importe quel appareil jusqu’à expiration. Une app Next.js bâtie sur la bibliothèque et les hooks, déployée sur Vercel en un clic avec cinq variables d’environnement.

- Déployer sur Vercel: https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FAbderrahmaneMouzoune%2Fs3nd%2Ftree%2Fmain%2Ftemplates%2Fdrop&project-name=s3nd-drop&repository-name=s3nd-drop&env=S3ND_BUCKET%2CS3ND_ENDPOINT%2CS3ND_REGION%2CAWS_ACCESS_KEY_ID%2CAWS_SECRET_ACCESS_KEY&envDescription=An+S3-compatible+bucket+and+a+key+pair+scoped+to+it.+R2%2C+S3%2C+MinIO%2C+Scaleway+and+Wasabi+all+work.&envLink=https%3A%2F%2Fs3nd.sh%2Fproviders
- Le template sur GitHub: https://github.com/AbderrahmaneMouzoune/s3nd/tree/main/templates/drop
- Essayer sur drop.s3nd.sh: https://drop.s3nd.sh

## Deux pages et une route.
La page de dépôt, la page de récupération, et le handler de transfert entre les deux. Tout le reste est à vous pour le restyler.

- **Une zone de dépôt** — Glissez un fichier ou choisissez-en un. Il atterrit dans votre bucket sous un code neuf avec une expiration inscrite sur l’objet, et la page affiche le code sur un panneau à volets à côté du lien à partager.
- **Une page de récupération** — `/K7QP2M4X` montre le nom du fichier, la taille et le temps restant, puis remet les octets. Un code inconnu ou expiré obtient le même 404, donc personne ne peut sonder quels codes ont servi.
- **Un seul fichier de route** — `createTransferHandler()` sert le protocole à quatre routes, donc la CLI fonctionne aussi contre votre déploiement : `s3nd put --remote https://drop.s3nd.sh/api/transfers`.
- **Un mot de passe optionnel** — Définissez `DROP_PASSWORD` et le dépôt le demande ; la récupération, jamais. Sans lui, quiconque trouve la page peut déposer un fichier dans votre bucket, ce qui va très bien derrière un proxy et pas du tout sur l’internet ouvert.

## Cinq variables, une règle de cycle de vie.
Le bucket et une paire de clés limitée à celui-ci. Vercel les demande au déploiement ; en local, elles vont dans .env.local.

**.env.local**
```sh
S3ND_BUCKET=drop
S3ND_ENDPOINT=https://<account-id>.r2.cloudflarestorage.com
S3ND_REGION=auto
AWS_ACCESS_KEY_ID=…
AWS_SECRET_ACCESS_KEY=…

# optional
DROP_PASSWORD=…              # ask for it before an upload
DROP_EXPIRES_IN=86400        # seconds, one day
DROP_MAX_SIZE_MB=4           # under Vercel's 4.5 MB request limit
```

1. Créez un bucket sur R2, S3, Scaleway, Wasabi ou un MinIO que vous hébergez, et une paire de clés avec lecture et écriture sur ce bucket et rien d’autre.
2. Cliquez sur Déployer, collez les cinq valeurs, attendez le build.
3. Ajoutez une règle de cycle de vie qui supprime les objets sous le préfixe après un jour ou deux : l’expiration empêche un transfert d’être remis, seule la règle supprime l’objet.
4. Lancez `npx @s3nd/cli doctor --remote https://drop.s3nd.sh/api/transfers` et regardez-le faire l’aller-retour d’un vrai transfert.

## Ce qu’il ne fait pas, pour l’instant.
- **4,5 Mo sur Vercel** — Un fichier passe par la fonction, donc la limite de requête de Vercel s’applique. `DROP_MAX_SIZE_MB` fixe le plafond en dessous, et un fichier trop gros est refusé avant tout upload. Les uploads présignés depuis le navigateur, qui lèvent la limite, sont sur la feuille de route.
- **Pas de comptes** — Le code est toute la poignée de main, et c’est un jeton au porteur. L’expiration par défaut est d’un jour ; raccourcissez-la avec `DROP_EXPIRES_IN` pour tout ce qui est sensible, ou chiffrez avant de déposer.
- **Restylez librement** — Tailwind, deux pages, aucun design system à apprendre. Le panneau à volets et l’ambre sont l’identité du site, pas le contrat du template.
