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:
-
<#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 Variablerow
gespeichert, die im Körper der Schleife verwendet wird. -
<#assign pdfcontent>${decodeBase64(row.get("base64Content"), "ISO-8859-1")!}</#assign>
: In dieser Zeile wird eine neue Variable namenspdfcontent
zugewiesen. Der Wert dieser Variable ist das Ergebnis derdecodeBase64
-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. -
${output(pdfcontent, row.get("orderID") + ".pdf")}
: Diese Zeile ruft eine Funktion namensoutput
des Steps auf
und übergibt zwei Argumente:pdfcontent
undrow.get("orderID") + ".pdf"
. Die Funktionoutput
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.