반응형
블로그 나 카페에서 이미지들이 있는 것을 볼 수 있다.
위와 같은 이미지를 클릭하면 URL이 바뀌는 것을 볼수가 있는데 다음과 같은 방법은 어떻게 하는 것일까?
1. 먼저 REST API 상에서 파일을 서버쪽으로 올리게 되는 Spring은 해당 파일을 다음과 같이 저장한다.
@ApiOperation(value = "피드 등록 ", notes = "성공시 200, 실패시 에러를 반환합니다. \n ")
@PostMapping("create")
public ResponseEntity<String> createFeed( @RequestParam("file") MultipartFile file) {
// 시간과 originalFilename으로 매핑 시켜서 src 주소를 만들어 낸다.
Date date = new Date();
StringBuilder sb = new StringBuilder();
// file image 가 없을 경우
if (file.isEmpty()) {
sb.append("none");
} else {
sb.append(date.getTime());
sb.append(file.getOriginalFilename());
}
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에 파일 위치랑 번호 등록
}
return new ResponseEntity<String>(SUCCESS, HttpStatus.OK);
}
소스 설명을 하자면 file 정보를 가져오고 그 값을 내 로컬 어딘가에 저장하는 것이다.
이때 중복이 일어날 수 있으니 파일 속성별 위치저장소 + 현재시간 등을 이용하여 중복값을 없애는 것이 중요하다. 그리고 이러한 정보를 Database에 이름 정보를 저장한다.
이값을 가지고 frontend에서 database에 있는 image 정보를 요청한다면 다음과 같이 getMapping을 이용하여 원하는 이미지를 불러올 수 있다.
// feed image 반환하기
@ApiOperation(value = "feed image 조회 ", notes = "feed Image를 반환합니다. 못찾은경우 기본 image를 반환합니다.")
@GetMapping(value = "image/{imagename}", produces = MediaType.IMAGE_JPEG_VALUE)
public ResponseEntity<byte[]> userSearch(@PathVariable("imagename") String imagename) throws IOException {
InputStream imageStream = new FileInputStream("C://images/feed/" + imagename);
byte[] imageByteArray = IOUtils.toByteArray(imageStream);
imageStream.close();
return new ResponseEntity<byte[]>(imageByteArray, HttpStatus.OK);
}
return 값은 byte 값으로 리턴하게된다 -> 이미지는 byte 배열 형태를 띄고 있다.
GEtMapping으로 image/ URL에 이름을 함께보내면 해당 경로의 image를 FileInputstream의 객체를 만들어서
byte[] 형태의 값으로 incoding 후 보내게 된다.
이렇게되면 frontend 단에서 img:src="URL/image/{flower}" 를 하게되면 front에서 해당 url을 요청과 동시에 이미지를 불러올수 있다.
반응형
'TOPIC' 카테고리의 다른 글
JOIN 안에 SUB쿼리를 JOIN으로 바꿔보자 (1) | 2021.01.17 |
---|---|
Junit5 기능 정리 (0) | 2021.01.14 |
JAVA : 배열 회전, 배열 90도 회전 방법 (1) | 2021.01.10 |
Access Token 클라이언트 보안전략 (0) | 2020.09.01 |
캡스톤 : 아두이노 안드로이드 블루투스 통신 (0) | 2020.07.04 |