Wie kann ich Base64-Inhalte in Dateien umwandeln? (z.B. für Bilder oder PDF)

Einzelnen Base64 Inhalt in eine Datei umwandeln

Der Step StringToFile kann über den mode Parameter Base64 Zeichenkette in Binärdatei eine Base64 kodierte Zeichenkette in eine Datei umwandeln.

Mehrere Base64 Inhalte in einem Spreadsheet

Anders sieht es aus, wenn man ein Spreadsheet hat, in dem eine Spalte Base64 Inhalte enthält (z.B. in einer API-Antwort beim Abruf von PDF-Rechnungen). Dann möchte man mehrere Dateien erzeugen - in z.B. eine PDF-Datei pro Spreadsheet-Zeile.

Mit der Funktion decodeBase64 kann man dann den Base64-Inhalt einer Spalte dekodieren (ins Binärformat) und in die Datei schreiben.

Der Step TextHtmlWriterMultiOutput kann mehrere Dateien aus einem Spreadsheet oder einer anderen Liste erzeugen.

Wenn man diesem Step ein Spreadsheet z.B. aus einem APICall Step übergibt, dann kann man damit pro Zeile eine Datei erzeugen und diese dann weiterverarbeiten.

<#list output@APICall_1.getRows() as row>
  <#assign pdfcontent>${decodeBase64(row.get("base64Content"), "ISO-8859-1")!}</#assign>
  ${output(pdfcontent, row.get("orderID") + ".pdf")}
</#list>

Erklärung

Dieses Freemarker-Skript-Snippet enthält Anweisungen, die in einer bestimmten Reihenfolge ausgeführt werden, um eine spezifische Aufgabe zu erledigen. Hier ist die Erklärung der einzelnen Teile:

  1. <#list output@APICall_1.getRows() as row>: Diese Zeile beginnt eine Schleife, die über alle Zeilen (rows) der Daten geht, die von einem API-Aufruf (APICall_1.getRows()) zurückgegeben werden. Jede Zeile wird in der Variable row gespeichert, die im Körper der Schleife verwendet wird.

  2. <#assign pdfcontent>${decodeBase64(row.get("base64Content"), "ISO-8859-1")!}</#assign>: In dieser Zeile wird eine neue Variable namens pdfcontent zugewiesen. Der Wert dieser Variable ist das Ergebnis der decodeBase64-Funktion, die den Inhalt der Spalte „base64Content“ aus der aktuellen Zeile (row) dekodiert. Die dekodierten Daten werden im Zeichensatz „ISO-8859-1“ interpretiert. Das Ausrufezeichen (!) am Ende ist ein Fehlerbehandlungsoperator, der sicherstellt, dass bei einem Fehler oder fehlenden Wert nichts passiert.

  3. ${output(pdfcontent, row.get("orderID") + ".pdf")}: Diese Zeile ruft eine Funktion namens output des Steps auf
    und übergibt zwei Argumente: pdfcontent und row.get("orderID") + ".pdf". Die Funktion output ist dafür verantwortlich, die dekodierten PDF-Inhalte irgendwo auszugeben oder zu speichern. Der Dateiname für dieses PDF wird aus der Bestellnummer (orderID) der aktuellen Zeile und der Erweiterung .pdf zusammengesetzt.

Das gesamte Snippet wird also für jede Zeile der durch den API-Aufruf erhaltenen Daten durchgeführt. Es dekodiert den „base64Content“ zu einem PDF und ruft dann eine output-Funktion oder -Vorlage auf, um dieses PDF zu speichern oder anderweitig auszugeben.

Wann und wozu wird Base64 bei der Arbeit mit APIs verwendet?

  • Datenübertragung: Base64 wird oft verwendet, um binäre Daten, wie z.B. Bilder oder PDF-Dateien, über Text-basierte APIs zu übertragen.
  • Zeichensatz-Unabhängigkeit: Base64 sorgt dafür, dass die Daten unabhängig vom Zeichensatz übertragen werden können.
  • Einbettung in JSON oder XML: Base64 ermöglicht die Einbettung von binären Daten in Textformate wie JSON oder XML, die üblicherweise in API-Aufrufen verwendet werden.
  • Einfachheit und Kompatibilität: Base64 ist weit verbreitet und einfach zu implementieren, was es zu einer häufig verwendeten Methode für die Datenübertragung in API-Aufrufen macht.