본문 바로가기
개발

스프링으로 간편하게 구현하는 파일 업로드와 다운로드 기능 안내

by 닉네임 입니다 2024. 11. 12.
728x90
반응형

스프링 파일 업로드와 다운로드 처리: 쉽게 구현하는 방법

안녕하세요! 개발과 블로그를 함께 즐기는 여러분, 오늘은 Java Spring을 활용하여 파일 업로드와 다운로드 기능을 구현하는 방법에 대해 알아보겠습니다. 파일을 업로드하거나 다운로드하는 기능은 많은 웹 애플리케이션에서 필수적입니다. 따라서 이번 포스트를 통해 이 기능을 쉽게 구현할 수 있는 방법을 단계별로 살펴보도록 하겠습니다.

들어가며

많은 개발자들이 다양한 웹 서비스에서 파일 업로드와 다운로드 기능을 구현해야 할 때가 많습니다. 예를 들어 게시판 서비스를 제공하는 경우, 사용자가 첨부파일을 추가할 수 있는 기능은 필수적입니다. 이 포스트에서는 간단한 코드 예제를 통해 파일 업로드 및 다운로드를 쉽게 구현하는 방법을 제공할 것입니다.

파일 업로드 구현하기

이제 파일 업로드 기능을 구현해 보겠습니다. Spring에서는 MultipartFile 인터페이스를 통해 파일 처리를 간편하게 지원합니다. 다음은 파일 업로드를 처리하는 컨트롤러의 예제입니다.

@Slf4j
@Controller
@RequestMapping("/board")
public class SpringUploadController {

    @PostMapping("/save")
    public String save(@RequestParam String title,
                       @RequestParam String author,
                       @RequestParam MultipartFile file) throws IOException {
        log.info("title={}, author={}", title, author);
        
        String path = "/Users/Shared/file/";
        if (!file.isEmpty()) {
            String fullPath = path + file.getOriginalFilename();
            file.transferTo(new File(fullPath)); // 파일을 해당 경로에 저장
        }
        
        return "upload";
    }
}

코드 설명하기

  1. 컨트롤러 및 요청 매핑: @Controller@RequestMapping을 사용하여 "/board" 경로에 대한 요청을 처리합니다.
  2. 파일 저장: @RequestParam을 통해 사용자가 입력한 제목, 작성자, 그리고 업로드할 파일을 받아옵니다. 파일이 비어있지 않을 경우 지정한 경로에 파일을 저장합니다.

고려사항

  • 업로드할 파일의 최대 크기를 제한하고 싶다면, application.properties 파일에서 설정할 수 있습니다.
    spring.servlet.multipart.max-file-size=10MB
    spring.servlet.multipart.max-request-size=100MB
    

파일 다운로드 구현하기

그럼 이제 업로드한 파일을 다운로드할 수 있는 기능도 한번 구현해 보겠습니다.

@Slf4j
@Controller
@RequiredArgsConstructor
public class BoardController {
    private final BoardRepository boardRepository;

    @GetMapping("/attach/{boardId}")
    public ResponseEntity<Resource> downloadAttach(@PathVariable Long boardId) throws MalformedURLException {
        Board board = boardRepository.findById(boardId);
        String fileKey= board.getFile().getKey();
        String uploadFileName = board.getFile().getUploadFileName();

        String path = "/Users/Shared/file/";
        UrlResource resource = new UrlResource("file:" + path + fileKey);

        // 파일명 인코딩 처리
        String encodeUploadFileName = UriUtils.encode(uploadFileName, StandardCharsets.UTF_8);
        String contentDisposition = "attachment; filename="" + encodeUploadFileName + """;
        
        return ResponseEntity.ok()
                .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
                .body(resource);
    }
}

코드 설명하기

  1. 파일 다운로드 요청 처리: @GetMapping을 통해 특정 boardId에 연관된 파일을 다운로드합니다.
  2. 파일 경로 설정 및 리소스 생성: 파일의 경로를 설정하고 UrlResource를 사용하여 다운로드 위한 리소스를 생성합니다.
  3. 한글 파일명 인코딩: 다운로드 시 파일명에 한글이 포함되어 있어도 제대로 처리되도록 인코딩합니다.
  1. ResponseEntity 반환: 파일 전송에 필요한 헤더와 함께 파일을 반환합니다.

마무리하며

오늘 포스트에서는 Java Spring을 활용하여 파일 업로드와 다운로드 기능을 구현하는 방법에 대해 알아보았습니다. 이를 통해 여러분의 웹 애플리케이션에 실용적인 파일 처리 기능을 쉽게 추가할 수 있게 되기를 바랍니다.

여러분도 이 코드를 참고하여 프로젝트에 적용해 보세요! 질문이나 추가 의견이 있으시면 언제든지 댓글로 남겨주시면 됩니다. 다음 포스트에서 더 유익한 정보로 찾아뵙겠습니다. 감사합니다!

728x90
반응형