2017-05-22 3 views
0

Nicht in der Lage Bilder einbetten und Dateien anhängen aus Feder Boot-Ressourcen OrdnerWie Bilder einbetten und Anhängen von Dateien aus Feder Boot Ressourcen Ordner

Ich habe einen REST-konformen Web Service mit Spring-Boot (Jar-Datei und nicht eine WAR-Datei erstellt). Einige der Dienste werden E-Mails senden, und einige von ihnen werden E-Mails mit Anhängen senden (werden dynamisch erstellt). Webpart (Angular) befindet sich im Apache-Server, der auf einem anderen Server bereitgestellt wird.

Ich benutze Freemarker Vorlage zum Verfassen von E-Mails und zum Senden von E-Mails mit Amazon SES.

von Freemarker Vorlage

<IMG src="cid:gridEmailHeaderImage"> 

-Code

MimeBodyPart inlineImage = new MimeBodyPart(); 
DataSource fds = new FileDataSource(imagePath.getAbsolutePath()); 
inlineImage.setDataHandler(new DataHandler(fds)); 
inlineImage.setHeader("Content-ID", "<" + contentId + ">"); 
inlineImage.setFileName(fds.getName()); 
content.addBodyPart(inlineImage); 

ich in der Lage Bild hinzufügen bin Dateien einbetten und anhängen, wenn ich absolute Pfad zur Verfügung stellen. Aber wenn relativer Pfad angegeben wird, funktioniert es nicht.

Meine Ordnerstruktur

C:\workspace\service-1.0\src\main\resources\images\header.png 
C:\workspace\service-1.0\src\main\resources\attachements\test-attachment-1.txt 

habe ich versucht, die folgenden ohne Erfolg

Ansatz 1

ServletContext context; 
String path = context.getRealPath("/resources/images")+"/header.png"; 

Es ist für die Bilder in dem folgenden Ordner aus, aber die Bilder ist in diesem Ordner nicht verfügbar.

C: \ Users \ Benutzername \ AppData \ Local \ Temp \ tomcat-Docbase .. \ resources \ images/header.png

Ansatz 2

basePath = this.getClass().getClassLoader().getResource("/images/").getPath(); 

C : \ workspace \ service-1.0 \ src \ main \ ressourcen \ images \ header.png

/C:/workspace/service-1.0/build/libs/service-1.0.jar!/BOOT-INF/classes!/images/ (nur von Eclipse funktioniert aber nicht über die Eingabeaufforderung java -jar bauen \ lib \ myapp.jar)

Ansatz 3

ClassPathResource file = new ClassPathResource("header.png"); 
String mypath = file.getFile().getAbsolutePath(); 

(Dies ist auch nicht funktioniert hat)

Wenn Ich lege das Bild in Bilder Ordner unter Ressource. Ich kann das Bild über die folgende URL anzeigen.

http://localhost:7075/myservice/v1/images/header.png 

ist es in Ordnung, Bilder aus Ressourcenordner zu laden? Werden Spring-Boot-Gläser zur Laufzeit explodiert? Wie lade ich Bilder aus der Spring-Boot-JAR-Datei?

Antwort

0

Da Ihre Ressourcen Teil Ihres jar-Containers sind, können Sie nicht den Dateipfad, sondern URLs verwenden, die von Ihrem Classloader bereitgestellt werden.Abhängig davon, ob Sie es von der IDE oder dem bereitgestellten Jar starten, ist dies entweder eine file://... oder jar:... URL. Der Ressourcenordner ist nicht Teil der Spring-Boot-Struktur, Sie dürfen ihn also nicht verwenden. Mit einer URLDataSource können Sie einfach Folgendes tun:

URLDataSource source = new URLDataSource(this.getClass().getResource("/images/header.png")); 
+0

Vielen Dank @Ralf Stuckert. Es hat perfekt funktioniert. – user3909315

+0

Das ist gut zu hören :-) Es wäre sehr nett, wenn Sie es als die richtige Antwort markieren. –

+0

Ich habe gerade die Antwort als richtige Antwort markiert. Vielen Dank noch mal. – user3909315

Verwandte Themen