본문 바로가기

Spring

Spring : 이미지업로드 및 이미지 반환.

반응형

https://www.facebook.com/annnbot/photos/a.782101778612665/782101781945998/

 

안녕로'봇'

안녕로'봇'님이 프로필 사진을 바꾸었습니다.

www.facebook.com

 

이미지를 불러오려고할 때 우리는 위와 같은 URL을 살펴볼 필요가 있다.

 

https://www.facebook.com/annnbot/photos/

이부분이 restapi controller고 생각해본다면

a.782101778612665/782101781945998/

뒤에부분은 저사진의 이름이라고 생각하면 spring에서 이미지를 업로드하고 불러오는 방법의 메커니즘이 상상이간다.

 

실제로는 이렇게 처리하지는 모르겠으나 이렇게 처리하면 될거같다.

 

 

파일업로드

		if (file.isEmpty()) {
			// file image 가 없을 경우
			sb.append("none.png");
		} else {
			sb.append(date.getTime());
			sb.append(file.getOriginalFilename());
		}
		feed.setSrc(sb.toString());


			// 파일 업로드 끝
			if (!file.isEmpty()) {
				File dest = new File("C://images/feed/" + sb.toString());
				try {
					file.transferTo(dest);
				} catch (IllegalStateException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
				// db에 파일 위치랑 번호 등록

			}
		

 

file.taranferTo를 사용하게되면 dest의 경로로 file이 전송되게 된다. 이때 spring에서는

@RequestParam("file") MultipartFile file

태그를 이용해서 파일을 불러오면 된다.

 

그럼 저장된 파일과 별개로 이 이미지 이름을 db에 저장해둘때 어느 유저가 올린 image이다라는 정보를 알 수있다.

 

그렇게되면 image들은 폴더에 모여서 관리하게 되고 db에는 image의 속성을 알수 있게된다.

 

 

만약 어떤유저가 자신이 올리 image들을 요구하게된다면 db에서 그 유저와 관련된 모든 imageName들을 유저에 전달할 것이다. 그때는 api/image/{ }     url 자체를 보내게되는데 컨트롤러에서 url 요청에대해 { } 안에있는 이미지를 반환하게 만들어주면 된다.

 

@GetMapping(value = "image/{imagename}", produces = MediaType.IMAGE_JPEG_VALUE)
	public ResponseEntity<byte[]> userSearch(@PathVariable("imagename") String imagename) throws IOException {
		System.out.println("test");
		InputStream imageStream = new FileInputStream("C://images/feed/" + imagename);
//		InputStream imageStream = new FileInputStream("/home/ubuntu/images/feed/" + imagename);
		byte[] imageByteArray = IOUtils.toByteArray(imageStream);
		imageStream.close();
		return new ResponseEntity<byte[]>(imageByteArray, HttpStatus.OK);
	}

다음과 같이 byte[]형식으로 반환하게 해주면 가장위에처럼 이미지만 chrom 상에서 반환되는 것을 볼 수 있다.

반응형

'Spring' 카테고리의 다른 글

@Configuration을 이용한 설정  (0) 2020.08.09
bean 이란  (0) 2020.08.09
스프링 Swagger 커스텀 마이징을 해보자  (0) 2020.07.24
Spring Token 만들고 검증하기  (0) 2020.07.23
Spring properties 설정  (0) 2020.07.22