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 [배워서 남주자]

https://lazymankook.tistory.com/73

728x90

+ Recent posts