File Drop
Un hébergeur de fichiers privé, auto-hébergé et minimal. On dépose un fichier, on reçoit un lien secret et intraçable. Les images, vidéos et sons s'affichent directement dans le navigateur ; les autres fichiers se téléchargent.
- Backend — Rust (Axum + Tokio)
- Frontend — Svelte (Vite + Tailwind)
- Stockage — système de fichiers local, sans base de données
Démarrage rapide
# 1. Construire le frontend (produit frontend/dist)
cd frontend
npm install
npm run build
cd ..
# 2. Lancer le serveur (depuis la racine du projet)
cargo run --release --manifest-path backend/Cargo.toml
Ouvrir ensuite http://localhost:3000.
Les chemins
STORAGE_DIRetSTATIC_DIRsont relatifs au dossier de lancement. Lance donc le serveur depuis la racine du projet (ou règle ces variables en absolu dans.env).
Configuration
Copier backend/.env.example vers .env puis l'adapter.
| Variable | Défaut | Rôle |
|---|---|---|
HOST / PORT |
0.0.0.0 / 3000 |
Adresse d'écoute. |
STORAGE_DIR |
./storage |
Dossier des fichiers et métadonnées. |
STATIC_DIR |
./frontend/dist |
Dossier du frontend construit. |
MAX_FILE_SIZE |
10GB |
Taille maximale d'envoi. |
FILE_TTL_MS |
172800000 |
Durée de vie d'un fichier (48 h max). |
KEY_LENGTH |
8 |
Longueur de la clé de partage (a-z0-9). |
PUBLIC_BASE_URL |
— | URL publique pour les liens absolus. |
RATE_LIMIT_ENABLED |
1 |
Limite de requêtes par IP. |
RATE_LIMIT_MAX |
300 |
Requêtes max par fenêtre. |
RATE_LIMIT_WINDOW_MS |
60000 |
Fenêtre en millisecondes. |
TRUST_PROXY |
0 |
Activer derrière un proxy (X-Forwarded-For). |
API
| Méthode | Route | Rôle |
|---|---|---|
POST |
/api/upload |
Envoi d'un fichier (multipart/form-data). |
GET |
/:key |
Téléchargement (inline pour les médias). |
POST |
/api/auth/:key |
Mot de passe d'un fichier protégé. |
DELETE |
/api/files/:id |
Suppression (en-tête X-Delete-Key). |
GET |
/api/health |
État du service. |
Exemple :
curl -F "[email protected]" http://localhost:3000/api/upload
Le lien renvoyé est de la forme http://localhost:3000/<clé>.png. Ajouter
?dl=1 force le téléchargement au lieu de l'affichage.
Structure
backend/ serveur Rust (Axum)
frontend/ interface Svelte (Vite + Tailwind)
scripts/ tests
storage/ données (généré au premier lancement)
Tests
cargo build # dans backend/
bash scripts/e2e-test.sh
Le test couvre l'envoi, le téléchargement, l'authentification par mot de passe, les clés invalides, la sanitisation des noms et la suppression.