728x90
Spring 프로젝트 생성시 Image, JS, CSS 등 정적 resource 파일을 지정된 폴더에서만 사용하도록 설정되어 있음.
(물론, 특별히 지정하면 외부경로 추가도 가능하기는 함)
1. 단순히 직접경로 입력하는 방식
@GetMapping(
value = "/get-image-with-media-type",
produces = MediaType.IMAGE_JPEG_VALUE
)
public @ResponseBody byte[] getImageWithMediaType() throws IOException {
InputStream in = getClass()
.getResourceAsStream("/com/baeldung/produceimage/image.jpg");
return IOUtils.toByteArray(in);
}
+
@GetMapping : @RequestMapping(method = RequestMethod.GET) 의 축약형
IOUtils = Apach Commons (commons-io) 라이브러리 (pom에 의존성 추가해야함)
2. Controller에서 webapp 폴더 경로 찾아서 이미지 제공하는 방식
@RestController
public class ImageController {
@Autowired
ImageService imageService;
@GetMapping(value = "/image/{imageName}.{extension}", produces = MediaType.IMAGE_PNG_VALUE)
public @ResponseBody byte[] getImage(
@PathVariable(name = "imageName") String imageName,
@PathVariable(name = "extension", required = false, defaultValue = "png") String extension,
HttpServletRequest request) throws IOException {
String imagePath = request.getServletContext().getRealPath("resources/image/" + imageName + "." + extension);
InputStream imageStream = new FileInputStream(imagePath);
byte[] imageByteArray = IOUtils.toByteArray(imageStream);
imageStream.close();
return imageByteArray;
}
}
+하다가 막힌 문제
HttpServletRequest의 getServletContext() 메서드 사용 문제 (tomcat이랑 servlet 버전 올리면 됨)
https://blog.naver.com/javaking75/220072102739
==> 이렇게 말고 그냥 'request.getSession().getServletContext().getRealPath'이렇게 써도 됨
Reference
https://blog.naver.com/k220j/220714945944
https://www.baeldung.com/spring-mvc-image-media-data
https://www.baeldung.com/spring-controller-return-image-file
https://countryxide.tistory.com/45 [배워서 남주자]
728x90
'Dev > Web' 카테고리의 다른 글
[MyBatis] oracle sequence 및 insert문에 sysdate 추가 (0) | 2020.04.13 |
---|---|
[Spring] javax.validation.ValidationException: HV000183: Unable to initialize 'javax.el.ExpressionFactory'. (0) | 2020.02.03 |
[Spring] Bean 정의 및 property (0) | 2019.10.29 |
[Spring] Bean 설정 - beans:bean (0) | 2019.10.29 |
[Spring] 스프링기초 - @RequestBody, @ResponseBody 사용법 (0) | 2019.10.29 |