[Spring#51] Spring Boot 이미지 업로드 / 알고리즘 : 대충 만든 자판

김한준 Hanjun Kim·2023년 12월 20일
1

내일배움캠프

목록 보기
52/70

Spring Boot 이미지 업로드

참고자료

  • Spring에서 제공하는 MultipartFile 인터페이스를 이용하여 uploadFile 메서드를 만들었다.

  • 폼 데이터를 사용하였다.

  • DB에 부담을 주지 않기 위해 DB에는 해당 이미지의 주소만 저장하고, 서버에 이미지 파일을 저장한다고 한다.

    • 이번 프로젝트에서는 서버에 저장을 할 수 없기 때문에 로컬에 저장하였다.
  • Multipart

    • 웹 클라이언트가 요청을 보낼 때, HTTP 프로토콜의 바디 부분에 데이터를 여러 부분으로 나눠서 보내는 것입니다.
    • 웹 클라이언트가 서버에게 파일을 업로드할 때, http 프로토콜의 바디 부분에 파일정보를 담아서 전송을 하는데,
      파일을 한번에 여러개 전송을 하면 body 부분에 파일이 여러개의 부분으로 연결되어 전송됩니다.
    • 이렇게 여러 부분으로 나뉘어서 전송되는 것은 Multipart data라고 합니다.
    • 보통 파일을 전송할 때 사용합니다.
  • MultipartFile

    • 사용자가 업로드한 File을 핸들러에서 손쉽게 다룰 수 있게 도와주는 매개변수 중 하나입니다.

    • 매개변수를 사용하기 위해서는 MultipartResolver Bean이 등록되어 있어야 합니다.

    • 이는 springBoot에서는 자동 등록을 지원하지만, springMVC에서 기본으로 등록해주지 않으므로 꼭 확인해야 합니다.

      • MultipartFile 인터페이스는 스프링에서 업로드 한 파일을 표현할 때 사용되는 인터페이스입니다.
      • MultipartFile 인터페이스를 이용해서 업로드한 파일의 이름, 실제 데이터, 파일 크기 등을 구할 수 있습니다.

실제 코드 예시

  • 컨트롤러
@PostMapping("/upload/{postId}")
    public void uploadFile(@AuthenticationPrincipal UserDetailsImpl userDetailsImpl,  @PathVariable("postId") Long postId,
            @RequestPart(value = "multipartFile")MultipartFile multipartFile) throws IOException {
        postService.uploadFile(userDetailsImpl.getUser(), postId, multipartFile);
    }
  • 서비스
@Transactional
    public void uploadFile(User user, Long postId, MultipartFile multipartFile) throws IOException {

        String fullPath="";
        if(!multipartFile.isEmpty()){
            fullPath = "C:/Users/wkdeh/OneDrive/바탕 화면/spartaSpring/" + multipartFile.getOriginalFilename();
            multipartFile.transferTo(new File(fullPath));
        }

        Post post = postRepository.findByIdAndUser(postId, user)
                .orElseThrow(NoSuchElementException::new);

        post.uploadFile(fullPath);

    }

알고리즘 : 대충 만든 자판

깃허브 링크:
https://github.com/wkdehf217/codingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/160586.%E2%80%85%EB%8C%80%EC%B6%A9%E2%80%85%EB%A7%8C%EB%93%A0%E2%80%85%EC%9E%90%ED%8C%90

profile
개발이 하고싶은 개발지망생

0개의 댓글