Comment convertir un ZIP en Base64
- Déposez un fichier
.zipdans la zone ou choisissez-le avec le sélecteur de fichiers. - Sortie en démarre sur Base64 brut. Utilisez JSON si vous voulez le nom du fichier, le type et la taille avec, ou HTML
<a download>pour un lien de téléchargement. - Laissez Couper à 76 désactivé, sauf si la chaîne va dans le corps d’un e-mail MIME.
- Copier la sortie, ou Enregistrer en .txt pour les grosses archives.
Zipper d’abord, encoder ensuite
Base64 ajoute environ un tiers à tout ce que vous lui donnez. La compression réduit le texte, le JSON, le CSV, le HTML et les logs avant que cela n’arrive : l’ordre compte donc. Un petit test avec un fichier JSON de 219 398 octets, une page HTML et une feuille de style :
| Approche | Caractères à envoyer |
|---|---|
| Le fichier JSON seul, encodé en Base64 | 292 532 |
| Les trois fichiers zippés (19 149 octets), puis Base64 | 25 532 |
Les images, vidéos, MP3 et archives existantes sont déjà compressées et ne rétrécissent presque pas, mais les regrouper dans un ZIP transforme quand même plusieurs fichiers en un seul champ. Pour un seul payload texte, gzip est une option plus légère ; voir Gzip et Base64.
Où l’on utilise des ZIP en Base64
- API de déploiement et d’automatisation : certains services qui exécutent du code ou hébergent des sites acceptent le paquet entier sous forme de ZIP encodé en Base64 dans une requête JSON.
- CI et coffres à secrets : un dossier de certificats ou de fichiers de configuration peut être zippé et stocké comme un seul secret Base64, puis restauré dans le pipeline avec
base64 -d. - Exports en masse et pièces jointes : un ensemble de rapports ou de factures part en une seule requête plutôt qu’avec un champ par fichier.
Construire le ZIP dans le code
Python peut créer l’archive en mémoire et l’encoder sans écrire de fichier temporaire :
import base64, io, zipfile
from pathlib import Path
buf = io.BytesIO()
with zipfile.ZipFile(buf, "w", zipfile.ZIP_DEFLATED) as z:
for path in Path("site").rglob("*"):
if path.is_file():
z.write(path, path.relative_to("site"))
package = base64.b64encode(buf.getvalue()).decode("ascii")
ZIP_DEFLATED compte : la valeur par défaut, ZIP_STORED, ne compresse rien du tout. Plus de détails sur le streaming et les fins de ligne dans Base64 en Python.
Vérifier un ZIP en Base64
| Le Base64 commence par | Signification |
|---|---|
UEsDBBQA | ZIP dont la première entrée exige la version 2.0 pour l’extraction, le cas habituel pour des entrées compressées |
UEsDBAoA | la première entrée n’exige que la version 1.0, ce que certains outils écrivent pour des entrées non compressées |
UEsFBg | une archive vide, sans rien dedans |
Si la chaîne commence par UEsFBg, l’archive a été créée sans aucun fichier, résultat fréquent d’un mauvais chemin dans un script de build. Base64 en ZIP décode une chaîne et liste les fichiers qu’elle contient : c’est le moyen le plus rapide de vérifier que l’archive contient bien ce que vous attendez.
FAQ
Pourquoi les fichiers DOCX, XLSX et JAR commencent-ils aussi par UEsDB ?
Ce sont des archives ZIP avec une structure interne fixe. UEsDB est le Base64 de PK\x03\x04, l’en-tête de fichier local qui ouvre tout ZIP non vide, quelle que soit son extension.
L'encodage Base64 compresse-t-il davantage un ZIP ?
Non. Base64 grossit toute entrée d’environ 33 %, et un ZIP est déjà compressé. Le gain vient du fait de zipper d’abord : les fichiers compressibles rétrécissent avant que le surcoût du Base64 ne s’ajoute.
Peut-on encoder un ZIP protégé par mot de passe ?
Oui. Une archive chiffrée s’encode comme n’importe quel autre fichier. Le destinataire a toujours besoin du mot de passe pour l’extraire.