Input/Output Ein PDF in einem BLOB umwandeln um ihn dann als PDF wieder anzuzeigen

Naxon89

Mitglied
Hallo zusammen,

ich möchte gerne eine PDF in einem BLOB umwandeln (dies funktioniert soweit) und anschließend durch ein anderes Programm ausgeben lassen (dies funktioniert nicht).

Zunächst beschreibe ich einfach mal, wie ich vorgegangen bin:
  1. Ich habe die PDF als Byte - Array eingelesen und dazu Files.readAllBytes(Paths.get(this.dest)) der Libary import java.nio.file.Files; genutzt
  2. Über Stackoverflow habe ich eine Methode gefunden, die aus einem Byte - Array ein Hexadezimalstring baut (Siehe Code Snippet 1)
  3. Diesen Hexadezimalstring habe ich dann in die DB hochgeladen (siehe Bild, rechte Seite)
Wenn ich nun diesen String mit meinem Testing Tool teste, wird diese PDF nicht angezeigt (Es wird nichtmal erkannt, dass es sich hier um eine PDF handelt). Auf der linken Seite seht ihr SOLL Ergebnisse, die ich mit meiner Java Anwendung erstellen muss. Rechts seht ihr das Resultat.

Ich hoffe, ihr könnt mein Problem verstehen. Wichtig ist, dass ich die PDFs durch mein Testing Tool anzeigen lassen (Code Snippet 2) und somit nicht ausreichend ist, wenn das ganze Rückwärst mit Java klappen würden.

Der Vollständigkeit halber sei Erwähnt, dass ich Java für die Android Entweckelung nutze (mit der IDE Android Studio) und das Testen durch ein PHP Script stattfindet.


Solltet ich noch etwas vergessen haben, werde ich es nachreichen.

Glückauf aus dem Ruhrgebiet

Tobias

Code Snippet 1
private String bytesToHex(byte[] bytes) {
char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
char[] hexChars = new char[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = HEX_ARRAY[v >>> 4];
hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
}
return new String(hexChars);
}

Code Snippet 2
<!-- In der Variable $file["File"] ist der BLOB aus der Datenbank -->
<object data="data:application/pdf;base64,<?= base64_encode($file["File"]) ?>" type="application/pdf" ></object>
 

Anhänge

  • 13dbf983-91bb-4504-aec5-cefbf7da0d81.jpg
    13dbf983-91bb-4504-aec5-cefbf7da0d81.jpg
    46,7 KB · Aufrufe: 5
Du Base64-encodierst hier ja auch nicht die Binärdaten des PDFs, sondern einen Hexadezimal-String, den du aus den Binärdaten des PDFs erstellst.
Der Browser sieht also: base64(binaryToHex(originalPDF)) und nicht base64(originalPDF).
Und warum wandelst du überhaupt die Binärdaten des PDF in eine Zeichenkette um?
Jede Datenbank hat auch einen Datentyp für Binärdaten, z.B. BLOB (**B**inary Large OBject), ohne es zuerst in eine Zeichenkette umzuwandeln.
Es sollte also möglich sein, dass du direkt das byte[] in der Datenbank als Wert speicherst.
 
Man kann Binaries bequem in BLOB | BFILE | LONG | LONG RAW | RAW (size) - Columns speichern. Eine Umwandlung in einen "Hexadezimalstring" ist nicht notwendig.
 
Vielen Dank für eure Antworten.

Da ich das Byte Array bereits als hexadezimal zum Server sende, musste ich serverseitig in PHP die Funktion hex2bin() aufrufen und schon funktioniert das.
Ich habe wahrscheinlich vergessen zu erwähnen, dass ich zum Senden der Daten ein REST Schnittstelle verwende und nicht direkt auf die Datenbank zugreifen darf.
 

Neue Themen


Zurück
Oben