2017-05-22 9 views
0

이미지를 포함하고 봄 부팅 자원 폴더에서 파일을 첨부 할 수없는이미지를 포함하고 봄 부팅 자원 폴더에서 파일을 첨부하는 방법

나는 봄 부팅 (JAR 파일이 아닌 전쟁 파일을 사용하여 RESTful 웹 서비스를 만들었습니다). 일부 서비스는 이메일을 보내고 일부는 첨부 파일이있는 이메일을 전송합니다 (동적으로 생성됩니다). 웹 파트 (Angular)는 다른 서버에 배포 된 Apache 서버에 있습니다.

이메일을 작성하고 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 : \ 사용자 \ 사용자 이름 \의 AppData \ 로컬 \ 온도 \ 바람둥이-Docbase에 .. \ 리소스 \ 이미지/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/,(단 일식에서 작동하지만 명령 프롬프트 자바에서 -jar 구축 \ lib 디렉토리 \ myapp.jar)

접근 3

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

(이것은 또한 작동하지 않았다)

하는 경우 자원 아래 이미지 폴더에 이미지를 놓습니다. 다음 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