2026-08-25 12:24:40 +02:00
2026-08-25 12:24:40 +02:00
2026-08-25 12:20:31 +02:00
2026-08-25 12:24:40 +02:00
2026-08-25 12:20:31 +02:00
2026-08-16 16:04:26 +02:00
2026-08-15 00:20:45 +02:00
2026-08-16 16:04:26 +02:00
2026-08-10 18:22:13 +02:00
2026-08-25 12:20:31 +02:00

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_DIR et STATIC_DIR sont 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.

S
Description
download.wf
Readme MIT-0
282 KiB
Languages
Rust 66.2%
Svelte 13.1%
Nix 6.9%
JavaScript 6.3%
Shell 5.4%
Other 2.1%