Outil de transfert de fichiers pair-à-pair simple, rapide et sécurisé
English | 简体中文 | 日本語 | 한국어 | Français | Español | Deutsch
🌐 Démo en ligne | 📖 Documentation | 🐛 Signaler un problème | 💡 Suggestions
| 🚀 | Transfert ultra-rapide Propulsé par le réseau edge mondial de Cloudflare avec des temps de réponse en millisecondes |
🔐 | Code de partage à 6 chiffres Simple et mémorable, avec 2,18 milliards de combinaisons pour la sécurité |
| 📦 | Support de gros fichiers Fichier unique jusqu'à 25 Mo, parfait pour les besoins quotidiens |
📝 | Formats multiples Prise en charge des fichiers, textes, images et divers types de contenu |
| 📚 | Téléversement par lot Prise en charge de plusieurs fichiers (jusqu'à 100) et images (jusqu'à 25) en une seule fois |
📦 | Téléchargement ZIP Téléchargez plusieurs fichiers/images sous forme d'un seul package ZIP |
| ⏱️ | Suppression automatique Supprimé automatiquement 1 minute après le téléchargement pour protéger la vie privée |
🆓 | Entièrement gratuit Basé sur le forfait gratuit de Cloudflare, aucune carte bancaire requise |
| 🎨 | Belle interface Design d'interface moderne avec une expérience utilisateur exceptionnelle |
📱 | Design responsive Prise en charge parfaite des mobiles, tablettes et ordinateurs |
👉 Visitez : https://f2f.icu
| Technologie | Description |
|---|---|
| ⚡️ Cloudflare Pages | Hébergement de site statique frontend avec accélération CDN mondiale |
| 🔥 Cloudflare Workers | API backend serverless avec edge computing |
| 💾 Cloudflare KV | Stockage clé-valeur avec prise en charge native du TTL |
| 🎨 Tailwind CSS | Framework CSS moderne pour un développement rapide de l'interface |
| 📝 TypeScript | Sur-ensemble typé de JavaScript |
- ✅ Node.js 16+
- ✅ Compte Cloudflare (le forfait gratuit suffit)
- ✅ Git
-
Forkez ce dépôt
Cliquez sur le bouton
Forken haut à droite -
Connectez-le à Cloudflare Pages
- Connectez-vous au Tableau de bord Cloudflare
- Allez dans
Workers & Pages→Create application→Pages→Connect to Git - Sélectionnez votre dépôt forké
- Configuration du build :
- Build command : Laisser vide (ou
npm run build) - Output directory :
public
- Build command : Laisser vide (ou
- Cliquez sur
Save and Deploy
-
Configurez le stockage KV
- Dans le tableau de bord, allez dans
Workers & Pages→KV - Cliquez sur
Create a namespace, nommez-lef2f-transfers - Retournez dans votre projet Pages →
Settings→Functions→KV namespace bindings - Ajoutez un binding :
- Variable name :
TRANSFERS - KV namespace : Sélectionnez
f2f-transfers
- Variable name :
- Sauvegardez et redéployez
- Dans le tableau de bord, allez dans
-
Terminé ! 🎉
Visitez le domaine fourni par Cloudflare
# Cloner le dépôt
git clone https://github.com/isnl/f2f.git
cd f2f
# Installer les dépendances
npm install
# Créer le namespace KV
wrangler kv:namespace create "TRANSFERS"
# Configurer wrangler.toml
# Ajoutez l'ID du namespace généré dans wrangler.toml
# Démarrer le serveur de développement local
npm run dev
# Visitez http://localhost:8788Éditez wrangler.toml :
name = "f2f-transfer"
compatibility_date = "2025-11-20"
pages_build_output_dir = "public"
[[kv_namespaces]]
binding = "TRANSFERS"
id = "your_kv_namespace_id_here" # Remplacez par votre ID KV de production
preview_id = "your_preview_kv_id_here" # Remplacez par votre ID KV de prévisualisation- Passez à l'onglet Envoyer
- Saisissez ou générez un code de partage à 6 chiffres (prend en charge les lettres majuscules A-Z et les chiffres 0-9)
- Sélectionnez le type de contenu :
- Fichier : Cliquez pour téléverser ou glissez-déposez (prend en charge plusieurs fichiers, jusqu'à 100, total ≤25 Mo)
- Texte : Saisissez le contenu textuel directement
- Image : Sélectionnez une image ou Ctrl/Cmd + V pour coller une capture d'écran (prend en charge plusieurs images, jusqu'à 25)
- Cliquez sur Créer le partage
- Copiez le code de partage ou le lien et envoyez-le au destinataire
- Passez à l'onglet Recevoir
- Saisissez le code de récupération à 6 chiffres
- Cliquez sur Obtenir le contenu
- Options de téléchargement :
- Fichier unique : Téléchargement automatique
- Plusieurs fichiers/images : Choisissez de télécharger individuellement ou sous forme de package ZIP
- Texte/Image : Affichage en aperçu direct
⚠️ Le contenu sera automatiquement supprimé après 1 minute, veuillez le sauvegarder rapidement
graph LR
A[Envoi] --> B[Conversion Base64]
B --> C[Stockage KV]
C --> D[Génération du code]
D --> E[Saisie du code]
E --> F[Lecture KV]
F --> G[Marqué téléchargé]
G --> H[TTL 1 minute]
H --> I[Suppression auto]
-
Phase d'envoi
- Fichier → Encodage Base64 → Stockage dans KV
- TTL par défaut : 1 heure (suppression automatique après 1 heure si non téléchargé)
-
Phase de téléchargement
- Vérification du code de partage → Lecture des données
- Marqué comme téléchargé → Mise à jour du TTL à 1 minute
- Déclenchement automatique du téléchargement navigateur (fichiers) ou affichage (texte/images)
-
Phase de nettoyage
- KV supprime automatiquement les données expirées selon le TTL
- Coût de maintenance nul
| Caractéristique | Stockage KV | Stockage objet R2 | Base de données D1 |
|---|---|---|---|
| Taille max. par valeur | 25 Mo ✅ | 5 Go | 1 Mo (nécessite un fractionnement) |
| Support TTL | Natif ✅ | ❌ Implémentation manuelle | ❌ Implémentation manuelle |
| Latence lecture/écriture | Très faible ✅ | Faible | Plus faible |
| Forfait gratuit | 100K lectures/jour ✅ | Nécessite une carte bancaire | 10 bases de données |
| Cas d'utilisation | Stockage temporaire de fichiers ✅ | Stockage de gros fichiers | Données structurées |
| Élément | Description |
|---|---|
| 🔢 Force du code | 6 caractères (A-Z, 0-9), ~2,18 milliards de combinaisons |
| ⏰ Conservation des données | Non téléchargé : 1 heure / Téléchargé : 1 minute |
| Non recommandé pour les informations sensibles (mots de passe, pièces d'identité, etc.) | |
| 🔐 Sécurité du transfert | Chiffrement HTTPS intégral |
- Taille des fichiers : Maximum 25 Mo au total
- Nombre de fichiers : Jusqu'à 100 fichiers ou 25 images par transfert
- Format du code de partage : 6 caractères en lettres majuscules ou chiffres (A-Z, 0-9)
- Conservation des données :
- Non téléchargé : Suppression automatique après 1 heure
- Téléchargé : Suppression automatique après 1 minute
- Forfait gratuit KV :
- 100 000 lectures par jour
- 1 000 écritures par jour
- Suffisant pour un usage personnel
Téléverser un fichier ou du texte
Paramètres de la requête (FormData) :
{
code: string, // Code de partage à 6 chiffres (obligatoire)
type: 'file' | 'text' | 'files' | 'images', // Type de contenu (obligatoire)
content: string, // Contenu (obligatoire)
// - file : Contenu du fichier encodé en Base64
// - text : Contenu en texte brut
// - files : Tableau JSON [{dataUrl, name, size, type}, ...]
// - images : Tableau JSON [{dataUrl, name}, ...]
fileName?: string // Nom du fichier (obligatoire quand type=file)
}Réponse :
{
success: true,
code: string, // Code de partage
message: string // Message de statut
}Télécharger un fichier ou obtenir du texte
Paramètres de la requête :
?code=ABC123 // Code de récupération à 6 chiffres
Réponse :
{
success: true,
type: 'file' | 'text' | 'files' | 'images',
content: string, // Base64, texte ou tableau JSON
contentType: string, // Type MIME
fileName?: string // Nom du fichier (retourné quand type=file)
}Éditez functions/api/upload.ts :
const maxSize = 25 * 1024 * 1024; // Modifiez selon la taille souhaitée (en octets)TTL de téléversement (non téléchargé) :
// functions/api/upload.ts
expirationTtl: 3600 // 1 heure = 3600 secondes, personnalisableTTL de téléchargement (téléchargé) :
// functions/api/download.ts
expirationTtl: 60 // 1 minute = 60 secondes, personnalisable- ✅ Chargement à la demande de Tailwind CSS
- ✅ Chargement différé des icônes (Lucide Icons)
- ✅ Aperçu d'images responsive
- ✅ Debouncing et throttling
- ✅ Edge computing (Cloudflare Workers)
- ✅ Accélération CDN mondiale
- ✅ Stockage KV à faible latence
- Activez la compression Brotli de Cloudflare
- Configurez un domaine personnalisé avec HTTPS
- Activez Cloudflare Analytics pour surveiller le trafic
- Utilisez Cloudflare Workers Analytics pour surveiller les performances de l'API
Nous accueillons toutes les formes de contributions ! 🎉
- Forkez ce dépôt
- Créez une branche de fonctionnalité (
git checkout -b feature/SuperFonctionnalite) - Validez vos modifications (
git commit -m 'Add some SuperFonctionnalite') - Poussez vers la branche (
git push origin feature/SuperFonctionnalite) - Soumettez une Pull Request
- 🐛 Signaler des bugs
- 💡 Suggérer de nouvelles fonctionnalités
- 📖 Améliorer la documentation
- 🎨 Optimiser l'UI/UX
- ⚡️ Optimisation des performances
- 🌍 Support multilingue
- Suivez les conventions TypeScript
- Gardez le code propre et lisible
- Ajoutez les commentaires nécessaires
- Testez les fonctionnalités avant de soumettre
Merci aux technologies et projets suivants :
- Cloudflare Pages - Hébergement de site statique
- Cloudflare Workers - Plateforme de calcul serverless
- Tailwind CSS - Framework CSS
- Lucide Icons - Bibliothèque d'icônes open source
Ce projet est sous licence MIT - consultez le fichier LICENSE pour plus de détails
- 🐛 Signaler des problèmes : GitHub Issues
- 💡 Suggestions de fonctionnalités : GitHub Discussions
- 📧 Contact par e-mail : Via GitHub
Pourquoi ne pas utiliser le stockage objet R2 ?
Le stockage objet R2 nécessite l'association d'une carte bancaire, tandis que le stockage KV est entièrement gratuit et prêt à l'emploi. Pour les transferts temporaires de fichiers de moins de 25 Mo, le stockage KV est suffisant avec une latence plus faible.
Comment modifier la limite de taille des fichiers ?
Modifiez la constante maxSize dans functions/api/upload.ts. Remarques :
- La taille maximale d'une valeur KV est de 25 Mo
- Les fichiers de plus de 25 Mo nécessitent le stockage objet R2
- Les fichiers plus volumineux prennent plus de temps à téléverser/télécharger
Les données sont-elles vraiment sécurisées ?
- ✅ Toutes les données sont stockées sur les nœuds edge de Cloudflare avec sécurité physique
- ✅ Transfert entièrement chiffré en HTTPS
- ✅ Le mécanisme de suppression automatique protège la vie privée
⚠️ Faible probabilité que le code à 6 chiffres soit deviné⚠️ Non recommandé pour les informations hautement sensibles (mots de passe, clés privées, etc.)
Pourquoi une suppression après 1 minute plutôt qu'immédiate après le téléchargement ?
Cela offre un temps de tolérance aux erreurs pour les utilisateurs :
- Évite les échecs de téléchargement dus à la latence réseau
- Permet aux utilisateurs de re-télécharger une fois
- La suppression automatique après 1 minute équilibre commodité et sécurité
Vous pouvez personnaliser cette durée dans le code.
Le forfait gratuit est-il suffisant ?
Amplement suffisant pour un usage personnel :
- Lectures KV : 100 000 par jour
- Écritures KV : 1 000 par jour
- Requêtes Workers : 100 000 par jour
Pour les équipes ou une utilisation à haute fréquence, il peut être nécessaire de passer à un forfait payant.
Puis-je l'auto-héberger ?
Absolument ! Ce projet est open source, vous pouvez :
- Forker ce dépôt
- Déployer sur votre propre compte Cloudflare
- Personnaliser le domaine et la configuration
- Avoir un contrôle total sur les données et le service
Le téléversement par lot est-il pris en charge ?
✅ Oui ! La version actuelle prend en charge le téléversement par lot :
- Plusieurs fichiers : Jusqu'à 100 fichiers, taille totale ne dépassant pas 25 Mo
- Plusieurs images : Jusqu'à 25 images, taille totale ne dépassant pas 25 Mo
- Options de téléchargement : Télécharger individuellement ou sous forme d'un seul package ZIP
Comment consulter les statistiques d'utilisation ?
Dans le tableau de bord Cloudflare, vous pouvez consulter :
- Workers Analytics : Nombre d'appels API, temps de réponse, etc.
- KV Metrics : Nombre de lectures/écritures, utilisation du stockage, etc.
- Pages Analytics : Trafic, distribution géographique, etc.
Made with ❤️ by isnl

