diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResource.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResource.java index 0fe64d1..a983735 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResource.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResource.java @@ -117,6 +117,13 @@ public class UserResource { return profileImage; } + @GetMapping(path = "image/profile/{userId}/{filename}", produces = MediaType.IMAGE_JPEG_VALUE) + public byte[] getProfileImageByUserId(@PathVariable String userId, @PathVariable String filename) throws IOException { + byte[] profileImage = userService.getImageByUserId(userId, filename); + log.debug("File size: {}", profileImage.length); + return profileImage; + } + private void authenticate(String username, String password) { Authentication auth = new UsernamePasswordAuthenticationToken(username, password); authenticationManager.authenticate(auth); diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserService.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserService.java index 3aaf6df..0af72fe 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserService.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserService.java @@ -30,4 +30,6 @@ public interface UserService extends UserDetailsService { byte[] getProfileImage(String username) throws IOException; + byte[] getImageByUserId(String userId, String filename) throws IOException; + } diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java index 655d3ac..051cfd0 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java @@ -220,9 +220,14 @@ public class UserServiceImpl implements UserService { @Override public byte[] getProfileImage(String username) throws IOException { User user = findByUsername(username); - Path userFolder = Paths - .get(USER_FOLDER, user.getUserId(), USER_IMAGE_FILENAME); - return Files.readAllBytes(userFolder); + return getImageByUserId(user.getUserId(), USER_IMAGE_FILENAME); + } + + @Override + public byte[] getImageByUserId(String userId, String filename) throws IOException { + Path userProfileImagePath = Paths + .get(USER_FOLDER, userId, filename); + return Files.readAllBytes(userProfileImagePath); } private void validateNewUsernameAndEmail(String username, String email) { diff --git a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceUnSecureTest.java b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceUnSecureTest.java index 2ae17cf..ea5090d 100644 --- a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceUnSecureTest.java +++ b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceUnSecureTest.java @@ -729,6 +729,29 @@ class UserResourceUnSecureTest extends BaseUserTest { .hasFieldOrPropertyWithValue("message", "Error occurred while processing file".toUpperCase()); } + @Test + void getImageById_correct() throws IOException { + + //given + String username = user.getUsername(); + uploadProfileImage(username); + String profileImageUrlFull = user.getProfileImageUrl(); + String profileImageUrl = profileImageUrlFull.substring(profileImageUrlFull.indexOf("/user/image/profile")); + log.debug("Image URL: {}", profileImageUrl); + + //when + RequestEntity requestEntity = RequestEntity.get(profileImageUrl) + .accept(MediaType.IMAGE_JPEG) + .build(); + var responseEntity = restTemplate.exchange(requestEntity, new ParameterizedTypeReference() { + }); + + //then + log.debug("Response Entity: {}", responseEntity); + assertThat(responseEntity.getStatusCode()).isEqualTo(OK); + assertThat(responseEntity.getBody()).hasSize(52); + } + private void uploadProfileImage(String username) throws IOException { MultipartFile profileImage = new MockMultipartFile("profileImage", "test.txt",