So wandeln Sie ein ZIP in Base64 um
- Legen Sie eine
.zip-Datei auf dem Feld ab oder wählen Sie sie über die Dateiauswahl. - Ausgabe als steht anfangs auf Reines Base64. Nehmen Sie JSON, wenn Sie Dateiname, Typ und Größe dazu haben möchten, oder HTML-
<a download>für einen Download-Link. - Lassen Sie Umbruch bei 76 aus, es sei denn, der String kommt in den Body einer MIME-E-Mail.
- Ausgabe kopieren, oder bei großen Archiven Als .txt speichern.
Erst zippen, dann kodieren
Base64 schlägt auf alles, was Sie ihm geben, etwa ein Drittel auf. Kompression nimmt Text, JSON, CSV, HTML und Logs vorher etwas weg, also kommt es auf die Reihenfolge an. Ein kleiner Test mit einer JSON-Datei von 219.398 Bytes, einer HTML-Seite und einem Stylesheet:
| Vorgehen | Zu sendende Zeichen |
|---|---|
| Nur die JSON-Datei, in Base64 kodiert | 292.532 |
| Alle drei Dateien gezippt (19.149 Bytes), dann Base64 | 25.532 |
Bilder, Videos, MP3s und vorhandene Archive sind bereits komprimiert und schrumpfen kaum, aber in einem ZIP gebündelt werden aus vielen Dateien trotzdem ein einziges Feld. Für eine einzelne Text-Payload ist gzip die schlankere Option; siehe Gzip und Base64.
Wo Base64-ZIPs verwendet werden
- Deployment- und Automatisierungs-APIs: Manche Dienste, die Code ausführen oder Websites hosten, nehmen das ganze Paket als Base64-kodiertes ZIP in einem JSON-Request an.
- CI und Secret-Stores: Ein Ordner mit Zertifikaten oder Konfigurationsdateien lässt sich zippen und als ein einziges Base64-Secret speichern und in der Pipeline mit
base64 -dwiederherstellen. - Massenexporte und Anhänge: Eine Reihe von Berichten oder Rechnungen geht in einem Request hinaus statt in einem Feld pro Datei.
Das ZIP im Code bauen
Python kann das Archiv im Speicher erzeugen und kodieren, ohne eine temporäre Datei zu schreiben:
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 ist wichtig: Das voreingestellte ZIP_STORED komprimiert überhaupt nicht. Mehr zu Streaming und Zeilenenden unter Base64 in Python.
Ein Base64-ZIP prüfen
| Base64 beginnt mit | Bedeutung |
|---|---|
UEsDBBQA | ZIP, dessen erster Eintrag zum Entpacken Version 2.0 braucht, der übliche Fall für komprimierte Einträge |
UEsDBAoA | der erste Eintrag braucht nur Version 1.0, was manche Tools für unkomprimierte Einträge schreiben |
UEsFBg | ein leeres Archiv ohne Inhalt |
Beginnt der String mit UEsFBg, wurde das Archiv ohne Dateien erzeugt, häufig die Folge eines falschen Pfads in einem Build-Skript. Base64 in ZIP dekodiert einen String und listet die enthaltenen Dateien auf. So prüfen Sie am schnellsten, ob das Archiv enthält, was Sie erwarten.
Häufige Fragen
Warum beginnen auch DOCX-, XLSX- und JAR-Dateien mit UEsDB?
Sie sind ZIP-Archive mit einem festen inneren Aufbau. UEsDB ist das Base64 von PK\x03\x04, dem lokalen Datei-Header, mit dem jedes nicht leere ZIP beginnt, egal welche Endung es hat.
Komprimiert Base64-Kodierung ein ZIP noch weiter?
Nein. Base64 macht jede Eingabe etwa 33 % größer, und ein ZIP ist bereits komprimiert. Der Gewinn kommt vom Zippen davor: Komprimierbare Dateien schrumpfen, bevor der Base64-Overhead hinzukommt.
Kann ich ein passwortgeschütztes ZIP kodieren?
Ja. Ein verschlüsseltes Archiv wird wie jede andere Datei kodiert. Der Empfänger braucht zum Entpacken trotzdem das Passwort.