2017-05-22 22 views
0

画像を埋め込むと、スプリングブートリソースフォルダからファイルを添付することができません画像を埋め込むとスプリングブートリソースフォルダからファイルを添付する方法

私は春ブーツ(Jarファイルではなく、WARファイルを使用してRESTfulなWebサービスを作成しました)。一部のサービスは電子メールを送信し、一部は添付ファイル付きの電子メールを送信します(動的に作成されます)。 Webパーツ(Angular)は、別のサーバーにデプロイされているApacheサーバーにあります。

私はFreemarkerテンプレートを使用して電子メールを作成し、Amazon SESを使用して電子メールを送信しています。 FreeMarkerのテンプレートから

<IMG src="cid:gridEmailHeaderImage"> 

コードは、画像I埋め込むと、私は絶対パスを提供する場合、ファイルを添付することができる午前

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); 

追加します。しかし、相対パスを提供すれば、それは機能しません。

マイフォルダ構造

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

私は、それは次のフォルダ内の画像を探していますが、画像れる無成功事例ので、次の

アプローチ1

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

を試してみましたそのフォルダでは使用できません。

C:\ Users \ユーザー名\のAppData \ローカル\一時\ tomcatに、文書ベース.. \リソース\画像/ header.pngを

アプローチ2

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

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

/C:/workspace/service-1.0/build/libs/service-1.0.jar!/BOOT-INF/classes!/images/ (のみ日食の作品ではなく、コマンドプロンプトからjavaの-jar構築\ libに\ myapp.jar)

アプローチ3

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

(これもうまくいきませんでした)

の場合リソースの下のimagesフォルダにイメージを置きます。次のURLから画像を見ることができます。

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

リソースフォルダからイメージをロードするのはいいですか?実行時に春のブートジャーが爆発するか?スプリングブートjarファイルから画像をロードする正しい方法は何ですか?

答えて

0

リソースはjarコンテナの一部であるため、ファイルパスは使用できませんが、クラスローダーによって提供されるURLは使用できません。IDEかデプロイされたjarのどちらから起動するかによって、file://...またはjar:...のいずれかのURLになります。リソースフォルダはスプリングブート構造の一部ではないので、使用しないでください。 URLDataSourceを使用すると、次のことができます。

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

@Ralf Stuckertありがとうございます。それは完璧に働いた。 – user3909315

+0

それは聞いて良いです:-)それは正しい答えとしてマークすると、非常に親切です。 –

+0

私はちょうど答えを正解とマークしました。もう一度ありがとうございます。 – user3909315

関連する問題