2012-11-12 9 views
5

es sowieso Bild in Freemarker zu schreiben, anstatt Link alsFeemarker Schreiben Bilder in HTML

geben

<img src="${pathToPortalImage}

Hinweis: kippe wir verwenden otputstream oder etwas in Freemarker?

+0

Freemarker nur eine Vorlage, und Bild sein Bild, müssen Sie die URL zur Verfügung zu stellen, entweder Web-URL der lokalen Datei-URL. – Ankit

+0

Ich brauche so etwas http://www.conandalton.net/2008/10/sending-binary-data-from-freemarker.html – Janith

Antwort

9

Sie können das Bild als base64 direkt in den HTML-Code img einbetten.

Um ein Bild in Base 64 zu konvertieren, können Sie Apache Commons (codec) verwenden.

Hier ist eine Lösung Apache Commons IO + Codec verwenden (aber man kann ohne tun, wenn Sie wollen):

File img = new File("file.png"); 
byte[] imgBytes = IOUtils.toByteArray(new FileInputStream(img)); 
byte[] imgBytesAsBase64 = Base64.encodeBase64(imgBytes); 
String imgDataAsBase64 = new String(imgBytesAsBase64); 
String imgAsBase64 = "data:image/png;base64," + imgDataAsBase64; 

dann wird die Variable imgAsBase64 in den Freemarker Kontext übergeben, und es wie folgt verwendet werden:

<img alt="My image" src="${imgAsBase64}" /> 
+0

Ich sende gebautes Format als Inhalt der Post, in Thunderbird funktioniert es gut und Bild wird geladen. Aber in MS Outlook Bild wird nicht geladen – Janith

+0

Sie sollten wissen, dass "Daten" URI-Schema wird nicht überall unterstützt. Zum Beispiel IE7 weiß es nicht. Update: Ich sehe, Sie haben gerade festgestellt, dass es auch nicht mit Outlook funktioniert. Zum Glück, da es eine E-Mail ist, können Sie die Bilder anhängen. Aber natürlich nicht mit FreeMarker, sondern mit der JavaMail API. – ddekany

+0

es ist für mich gearbeitet, tq –

0

Ein gutes Beispiel oben. Aber mit JAVA 8 wir können etwas tun:

Path path = Paths.get("image.png"); 
byte[] data = Files.readAllBytes(path); 
byte[] encoded = Base64.getEncoder().encode(data); 
String imgDataAsBase64 = new String(encoded); 
String imgAsBase64 = "data:image/png;base64," + imgDataAsBase64;