Hilfe bei Konvertierung von base64 in pdf binary

-xan-

Neues Mitglied
Hallo zusammen,

ich versuche gerade in einem ERP-System eine pdf-Datei in einzulesen als base64 und local wieder als pdf zu speichern.
Die Programmiersprache nennt sich "bsl" und ist eine eigens vom Hersteller entwickelte Programmiersprache die am Ende in Java "kompiliert" wird (Ich hoffe das ist der richtige Begriff)

Das Umwandeln der Datei funktioniert so
vars jamtxtlong = boa_read_file_as_bas64(filePath)

Wenn ich mir den base64-String kopiere und irgendwo in einen base64-decoder reinschmeisse, wird mir auch wieder die original-PDF angezeigt.

Mein Problem scheint beim schreiben der Datei zu bestehen. Hier gibt es ein paar Prozeduren mit denen ich es schon versucht habe. Eine ist diese hier.

boa_base64_decode(jamtxtlong)

Schreibe ich das Ergebnis in eine Datei ist zwar ein Inhalt vorhanden aber die Datei wird mir mit leeren Seiten angezeigt.

In der Dokumentation steht zu boa_base64_decode folgendes:

Beschreibung

boa_base64_decode dekodiert den übergeben Base64-Wert

Deklaration

String boa_base64_decode (String value)

Parameter
value
der kodierte Wert

Rückgabe

der dekodierte Wert
{
-1} Ungültige Länge des kodierten Wertes
{
-2} Der kodierte Wert enthält ungültige Zeichen

Was ist das endgültige Ziel?
Am Ende muss ich die binary in einen POST Request für einen Rest-API-Call mit multipart/form-data bekommen. Hier haben andere Verfahren schon versagt, immer mit dem selben ergebnis, dass am Ende die Datei nicht gelesen werden kann. Daher bin ich jetzt auf kleinster Ebene und versuche die Datei erstmal nur lokal zu lesen/schreiben.

Kann das irgendwie mit dem encoding zu tun haben? Habt Ihr Ideen für eine sinnvolle Fehleranalyse?

Vielen Dank für Eure Hilfe

Grüße
xan
 

Robert Zenz

Top Contributor
Die interessante Frage ist was bei boa_read_file_as_base64 rauskommt, ich wuerde ien byte[] erwarten, weil die Datei ja als Base64 gelesen wird. Damit ist der zweite "decode"-Schritt unnoetig. Kontrolliere mal die Werte welche du bei den Funktionen zurueck bekommst.
 

-xan-

Neues Mitglied
Hallo Robert,
Ich verstehe die Frage nicht ganz. Sorry
boa_read_file_as_base64
gibt aus
JVBERi0xLjQKJQozIDAgb2JqCjw8Ci9Qcm9kdWNlciAoUERGLVhDaGFuZ2UgMy42MC4wMTA5IFwoV2luZG93c1wpKQovVGl0bGUgKEl....==

(gekürzt weil zu lang).

Meintest du das?
 

KonradN

Super-Moderator
Mitarbeiter
Das ist ja das Einlesen und das war doch nach meinem Verständnis nicht das Problem. Es ging doch um das Decoding. Und da scheint die Methode auch nicht passend zu sein:
String boa_base64_decode (String value)

Wieso da ein String zurück kommen soll, verstehe ich nicht. Denn da würde ich auch ein byte[] oder so erwarten.

Am Ende muss ich die binary in einen POST Request für einen Rest-API-Call mit multipart/form-data bekommen.
Hier ist die Frage, was genau erwartet wird. Bei einem multipart Request hast Du in der Regel mehrere Teile die mit einem Boundary getrennt sind. Bei einer Datei hast Du dann einen Header ähnlich wie:
Content-Disposition: form-data; name="fileField"; filename="example.txt" gefolgt vom Content-Type und einer Leerzeile.
Danach würden die Bytes der Datei kommen ohne jedes Encoding.

Wenn sowas aufgebaut wird, dann ist klar: Du brauchst die direkten Bytes der Datei. Hier solltest Du also schauen, ob Du eine Funktion findest, die ähnlich wie die aktuelle Methode aussieht aber eben keinen String zurück gibt sondern die wirklichen Rohdaten. Oder evtl. gibt es auch einfach eine Methode, die eine Datei direkt einliest ohne es Base64 kodiert zu haben (Wozu Base64 kodieren, wenn Du es dann eh wieder dekodierst?)

Eine weitere Überlegung könnte sein (So der Server es unterstützt):
Content-Transfer-Encoding: base64
Wenn der Server Content Transfer Encoding unterstützt, dann könnte die Datei auch als base64 kodiert angegeben werden. Dann wäre der vorhandene base64 String ok. Die Frage ist aber natürlich auch, ob/wie Du das Content Transfer Encoding setzen kannst...
 

Jw456

Top Contributor
Du bekommst ja mit "boa_read_file_as_bas64(filePath)" eine Base64 String .
Wenn du ihn wieder im Originalhaben willst dann währe das für nicht ein Decoden sondern ein Entcoden.
Codiert hast du ihn ja schon beim lesen der Datei.

Hast du einen Link zu der benutzen Lib.
 

Ähnliche Java Themen

Neue Themen


Oben