# Déployer une drop box

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

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

Déposez un fichier, obtenez un code de huit caractères, un lien et un QR code ; tapez le code ou scannez-le sur n’importe quel appareil jusqu’à expiration, puis brûlez-le. 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%2Fwww.s3nd.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 d’accueil pour déposer un fichier ou taper un code, 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, le lien à partager, et un QR code de ce lien.
- **Vous avez déjà un code ?** — L’autre moitié de la page d’accueil : tapez les huit caractères lus sur l’autre écran, les fautes de frappe réparées au fil de la saisie (`k7qp-2m4x` se lit `K7QP2M4X`), et arrivez sur la page de récupération.
- **De l’ordinateur au téléphone** — Pointez l’appareil photo du téléphone sur le QR code à côté du panneau : la page de récupération s’ouvre sur le téléphone. Téléchargez là, et la page propose de brûler le code juste après, pour que rien ne reste dans le bucket.
- **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        # the default lifetime, in seconds
DROP_MAX_EXPIRES_IN=604800   # the longest a sender may choose
DROP_MAX_SIZE_MB=4           # under Vercel's 4.5 MB request limit
DROP_PREVIEW=true            # show what is behind a code before downloading
```

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.
