Base64 funktioniert nicht, aber btoa funktioniert

krgewb

Top Contributor
Ich hole ein Bild anhand der URL und wandle es in Base64 um. Im Frontend füge ich dann nur noch "data:image/jpeg;base64," am Anfang ein.
Java:
ResponseEntity<String> exchange = restTemplate.exchange(urlOfImage, HttpMethod.GET, entity, String.class);
String s = exchange.getBody();
String stringInBase64 = Base64.getEncoder().encodeToString(s.getBytes());
Das Bild kann nicht angezeigt werden.

Wenn ich jedoch den unverschlüsselten String ( s ) zurückgebe, dann funktioniert es. Dazu verwende ich im Frontend die Javascript-Methode btoa.
 

mrBrown

Super-Moderator
Mitarbeiter
Was steht denn in s drin? Ein Bild in einem nicht Base64-Encodierten String speichern klingt nach keiner sehr guten Idee.
 

LimDul

Top Contributor
Das Problem dürfte sein, dass getBytes ohne Encoding dann "zufällig" ist, welches Encoding gewählt wird. (Plattform Default).

Wenn irgendwer das Bild in einen String schreibt (Wer macht sowas? Da bin ich bei @mrBrown) dann muss beim zurückwandeln das exakt gleiche Encoding gewählt werden.
 

MoxxiManagarm

Top Contributor
Beispiel 1:

QR-Codes. Die werden als Daten erzeugt. Du hast also kein Bild, was du von einer Resource lädst, du hast nur "Daten". Die speichert man dann gerne in einen base64-encoded String und gibt diesen String dann an das img-Tag im html um den generierten Code anzuzeigen.

Beispiel 2:

Du hast ein html mit Bildern. Dieses html möchtest du nun von einem html-to-pdf-Renderer in ein PDF umwandeln. Dieser pdf-Renderer hat keinen Zugriff auf externe Resourcen, alles muss im html eingebettet sein. Das schaffst du denke ich nur mit dem base64-codierten Bild im img Tag

Beispiel 3:

Ich habe Server Applikationen gesehen, die speichern z.B. Avatare von Benutzern in diesem Format in ihrer Datenbank und geben es so der Client Applikation zurück. Dann ist es auch am einfachsten den String zu nehmen wie er ist und ihn so in das img Tag zu packen, wenn der Avatar angezeigt werden soll.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Beispiel 1:

QR-Codes. Die werden als Daten erzeugt. Du hast also kein Bild, was du von einer Resource lädst, du hast nur "Daten". Die speichert man dann gerne in einen base64-encoded String und gibt diesen String dann an das img-Tag im html um den generierten Code anzuzeigen.

Beispiel 2:

Du hast ein html mit Bildern. Dieses html möchtest du nun von einem html-to-pdf-Renderer in ein PDF umwandeln. Dieser pdf-Renderer hat keinen Zugriff auf externe Resourcen, alles muss im html eingebettet sein. Das schaffst du denke ich nur mit dem base64-codierten Bild im img Tag

Beispiel 3:

Ich habe Server Applikationen gesehen, die speichern z.B. Avatare von Benutzern in diesem Format in ihrer Datenbank und geben es so der Client Applikation zurück. Dann ist es auch am einfachsten den String zu nehmen wie er ist und ihn so in das img Tag zu packen, wenn der Avatar angezeigt werden soll.
Aber in allen Beispielen ist der String zumindest irgendwie sinnvoll kodiert, und nicht nur ein String erzeugt aus den reinen bytes der Grafik? Also nicht einfach nur "ich nehme die reinen Bytes und behandle die jetzt einfach als String, egal was drin steht", sondern ein sinnvolles bytes zu String-konvertieren.

Das Beispiel von @krgewb enthält ja auch sowas wie '\u0000'...
 
K

kneitzel

Gast
Die speichert man dann gerne in einen base64-encoded String
Das ist das wichtige - es wird in einem base64-encoded String gespeichert. Das ist dann auch ok.

Aber hier liegen die Byte-Daten so in einem String. Und das kann nicht nur durch diverse encoding/decoding Aktionen zu Problemen führen sondern das Encoding oder Decoding kann auch fehlschlagen.

Siehe dazu z.B. https://unicode.org/faq/utf_bom.html
Are there any byte sequences that are not generated by a UTF? How should I interpret them?
A: None of the UTFs can generate every arbitrary byte sequence. For example, in UTF-8 every byte of the form 110xxxxx2 must be followed with a byte of the form 10xxxxxx2. A sequence such as <110xxxxx2 0xxxxxxx2> is illegal, and must never be generated. When faced with this illegal byte sequence while transforming or interpreting, a UTF-8 conformant process must treat the first byte 110xxxxx2 as an illegal termination error: for example, either signaling an error, filtering the byte out, or representing the byte with a marker such as FFFD (REPLACEMENT CHARACTER). In the latter two cases, it will continue processing at the second byte 0xxxxxxx2.

A conformant process must not interpret illegal or ill-formed byte sequences as characters, however, it may take error recovery actions. No conformant process may use irregular byte sequences to encode out-of-band information.

Daher wäre ich hier auch deutlich vorsichtiger und würde so Interfaces / APIs überdenken. Zumal ein korrekter Weg (base64 encoding) ja auch schon genannt ist ...
 

LimDul

Top Contributor
Beispiel 1:

QR-Codes. Die werden als Daten erzeugt. Du hast also kein Bild, was du von einer Resource lädst, du hast nur "Daten". Die speichert man dann gerne in einen base64-encoded String und gibt diesen String dann an das img-Tag im html um den generierten Code anzuzeigen.

Beispiel 2:

Du hast ein html mit Bildern. Dieses html möchtest du nun von einem html-to-pdf-Renderer in ein PDF umwandeln. Dieser pdf-Renderer hat keinen Zugriff auf externe Resourcen, alles muss im html eingebettet sein. Das schaffst du denke ich nur mit dem base64-codierten Bild im img Tag

Beispiel 3:

Ich habe Server Applikationen gesehen, die speichern z.B. Avatare von Benutzern in diesem Format in ihrer Datenbank und geben es so der Client Applikation zurück. Dann ist es auch am einfachsten den String zu nehmen wie er ist und ihn so in das img Tag zu packen, wenn der Avatar angezeigt werden soll.
Einen Base-64 kodierten String => Klar.
Die Binärdaten eines Bildes unencodiert in einem String speichern => WARUM?
 

LimDul

Top Contributor
Ok, das wusste ich nicht. Dann ist der gesamte Code da oben Unfug, weil dann wird der String ja nochmal Base 64 encodierit.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Codierung im Frontend funktioniert nicht richtig Web Tier 2
S Websocket.jar funktioniert nur teilweise Web Tier 14
M webapp controller funktioniert nicht Web Tier 3
J Https Verknüpfung funktioniert nicht Web Tier 0
W JSF DataTable - Filter Funktion funktioniert nicht Web Tier 3
F JSF Bean funktioniert nicht immer.. Web Tier 3
L error-page mit ui:composite funktioniert nicht Web Tier 0
L JSF Composit Component mit ajax funktioniert nicht. Web Tier 4
M <p:accordionPanel <ui:repeat <p:commandButton Action funktioniert teilweise Web Tier 3
A Aufruf eines Servlets auf einer JSP Seite funktioniert nicht Web Tier 10
D JSF cellpadding oder cellspacing funktioniert nicht Web Tier 4
W JSF Login funktioniert nicht Web Tier 12
F PrimeFaces p:selectOneMenu funktioniert nicht Web Tier 12
J @Named Notation funktioniert nicht Web Tier 3
D richTable sort funktioniert nicht Web Tier 2
A Servlet File Upload funktioniert nur lokal auf Entwicklungsrechner, nicht in Tomcat Web Tier 5
J JSF Richfaces Tabs, dynamisches include funktioniert nicht Web Tier 4
D Fileupload in GWT funktioniert nicht Web Tier 10
A JSF Weiterleitung funktioniert einfach nicht Web Tier 2
T Funktioniert das Zusammenspiel folgender Komponenten? Web Tier 2
D [GWT] Celltable SimplePager funktioniert in 2.2 nicht Web Tier 1
T JSF Dependency-Injection funktioniert offenbar nicht - warum? Web Tier 4
S Bean Validation (JSF 2.0) funktioniert nicht. Web Tier 4
D JSF 2.0 Navigationsregel funktioniert nicht Web Tier 2
F JApplet in Tomcat-Umgebung funktioniert mal wieder nicht ... Web Tier 8
P Richfaces/Seam: RichShuttleListe funktioniert nicht Web Tier 8
P Tomcat funktioniert nicht so wie er sollte Web Tier 11
megachucky JSF - NavigationRule funktioniert nicht Web Tier 9
C RichFaces Ajax ReRender funktioniert nicht. Web Tier 2
L BMI-Messer funktioniert nicht Web Tier 18
G Session.invalide() funktioniert nicht richtig Web Tier 2
hjpsoft JSP <TEXTAREA>-Tag unterstützt EL-Variablen nicht Web Tier 7
6 JSF Form Attribute nicht an Bean übergeben Web Tier 2
C JSP data wird nicht angezeigt Web Tier 6
Psypsy Spring Thymeleaf Layer werden nicht angezeigt. Web Tier 0
P JSF (Primefaces) SelectOneMenu Value auf Array wird nicht gesetzt Web Tier 0
K Vaadin Projekt Funkioniert nicht... Web Tier 1
M JSP PrimeFaces LayoutUnits <- breite lässt sich nicht erzwingen wenn 'center' Web Tier 0
R JSF selectOneListbox speichert Value nicht. Web Tier 1
W Tabelle wird nicht aktualisiert Web Tier 8
A JSF String wird nicht angezeigt Web Tier 2
S JSF CSS wird gefunden aber inhaltlich nicht angewendet Web Tier 2
FINF_AW_Alex EJB - property nicht vorhanden Web Tier 6
R JSF Bilder aus CSS Datei werden nicht angezeigt. Web Tier 2
C JSF JSF Daten aus Klasse werden nicht angezeigt Web Tier 4
F JSF h:selectOneMenu Wert vorbelegen klappt nicht? Web Tier 2
R JSF ManagedProperty wird nicht erstellt Web Tier 1
H JSF jsf/sessionScoped Bean - Bilder (jpg) werden nicht richtig dargestellt Web Tier 1
S Primefaces commandButton in einem Dialog/Form/PanelGrid führt actionListener nicht aus Web Tier 4
A Faces Context nicht mehr erreichbar nach Servlet Aufruf Web Tier 1
D JSF DataTable konvertiert Felder nicht Web Tier 1
G JSF Radio Button ValueChangeListener Wert wird nicht übernommen Web Tier 2
M fileUploadListener geht nicht wenn Element zur Laufzeit gerendert wird Web Tier 2
Phash Link geht nicht Web Tier 4
S setInterval() will nicht Web Tier 2
B JSP Warum nicht ThreadSafe? Web Tier 21
G GWT 404 - Servlet nicht gefunden Web Tier 6
H Servlet lässt sich nicht deployen Web Tier 7
M rendered ruft eine Methode auf, andere aber nicht Web Tier 15
M System-Event in der faces-config.xml klappt nicht Web Tier 15
J JSF BigInteger nicht null sondern 0 Web Tier 3
nrg Java-Code in Taglib wird nicht richtig ausgeführt. Web Tier 7
F JSF CSS Verschachtelung wird nicht abgebildet Web Tier 2
F.S.WhiTeY Servlet Servlet wird nicht angesprochen Web Tier 3
D JSF a4j:support wird nicht gefunden Web Tier 2
xehpuk JSF 404 statt 500 bei nicht existenter JSF-Seite Web Tier 7
K Neue Entitäten werde nicht angezeigt Web Tier 4
H JSP, Eclipse, Tomcat - Java Klasse wird nicht gefunden Web Tier 8
A JSF WebappClassloader.modified() aktualisiert Klassen nicht Web Tier 2
A JSF Rücksicht auf nicht eingeschaltetes JavaScript nehmen Web Tier 2
T JSF wird nicht ausgeführt Web Tier 4
R RadioButton nicht disabled Web Tier 5
aze JSF CommandButton:Action wird nicht ausgeführt Web Tier 2
P JSF Netbeans 7.1.1 unterstützt JSF nicht? Web Tier 2
T RichFaces will nicht funktionieren :( Web Tier 2
L Applet kann unter WEB-INF/classes nicht gefunden werden Web Tier 10
H JSF ActionListener wird ausgeführt, aber ändert den Wert nicht. Web Tier 7
R JSF Beans werden nicht ausgeführt Web Tier 4
L JSF Beispiel wird nicht ausgeführt Web Tier 2
D Fehler: Cookies nicht gesetzt Web Tier 5
Dit_ JSP Überprüfen ob Benutzer eingeloggt ist oder nicht | SessionSicherheit Web Tier 7
M JSF Button - Methode wird nicht aufgerufen Web Tier 4
L einfache JSF-Seite wird nicht angezeigt Web Tier 8
B JSF HtmlCommandButton --- Action wird nicht aufgerufen Web Tier 2
N JSF [Maven] Seam 2.2, Richfaces 3.3 - a4j wird nicht umgewandelt Web Tier 6
NoXiD JSF h:selectOneMenu - änderungen nicht übernommen Web Tier 14
C JSON-Antwort an Javascript geht nicht Web Tier 7
H Servlet Apache Geronimo: Servlet nicht erreichbar Web Tier 2
P JSF AJAX render wird nicht ausgeführt Web Tier 4
P SelectOneMenu liest Daten nicht ein Web Tier 7
E JSF JSF findet Property im ManagedBean nicht Web Tier 5
P Servlet wird nicht gefunden - HTTP Error 503 Web Tier 7
S JSF Primefaces Thema, Css wird geladen, nur die Bilder nicht, bzw Resource wird nicht aufgelöst Web Tier 5
B JSF Login authentication schaffe ich nicht Web Tier 2
P Eclipse zeigt Errors an, die auf Tomcat nicht auftreten Web Tier 2
F Property nicht gefunden (trotz getter und setter) Web Tier 3
B JSF Servlectexception: Verwalteter Bean "..bean" kann nicht erstellt werden Web Tier 2
C JSF JSF 2 - Anwendung lädt nicht Web Tier 4
S JSP lässt sich nicht ausführen Web Tier 2
I JSF Daten aus Formular werden nicht übernommen Web Tier 6

Ähnliche Java Themen

Neue Themen


Oben