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";
}
}
코드 설명하기
- 컨트롤러 및 요청 매핑:
@Controller
와@RequestMapping
을 사용하여"/board"
경로에 대한 요청을 처리합니다. - 파일 저장:
@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);
}
}
코드 설명하기
- 파일 다운로드 요청 처리:
@GetMapping
을 통해 특정boardId
에 연관된 파일을 다운로드합니다. - 파일 경로 설정 및 리소스 생성: 파일의 경로를 설정하고
UrlResource
를 사용하여 다운로드 위한 리소스를 생성합니다. - 한글 파일명 인코딩: 다운로드 시 파일명에 한글이 포함되어 있어도 제대로 처리되도록 인코딩합니다.
- ResponseEntity 반환: 파일 전송에 필요한 헤더와 함께 파일을 반환합니다.
마무리하며
오늘 포스트에서는 Java Spring을 활용하여 파일 업로드와 다운로드 기능을 구현하는 방법에 대해 알아보았습니다. 이를 통해 여러분의 웹 애플리케이션에 실용적인 파일 처리 기능을 쉽게 추가할 수 있게 되기를 바랍니다.
여러분도 이 코드를 참고하여 프로젝트에 적용해 보세요! 질문이나 추가 의견이 있으시면 언제든지 댓글로 남겨주시면 됩니다. 다음 포스트에서 더 유익한 정보로 찾아뵙겠습니다. 감사합니다!
728x90
반응형
'개발' 카테고리의 다른 글
JPA 영속성 컨텍스트의 이해와 장점 탐구하기 (0) | 2024.11.13 |
---|---|
파이썬으로 배우는 파일 처리의 기초: 데이터 저장 및 읽기 프로그램 만들기 (1) | 2024.11.12 |
특정 유저 기록 조회 API 연결을 통한 데이터 처리 입문 (0) | 2024.11.12 |
스프링 부트 3.2.0 마이그레이션 필수 가이드: 업그레이드를 위한 단계별 접근법 (1) | 2024.11.12 |
Go 언어와 M1 Mac에서의 크로스 컴파일 문제 해결 가이드 (0) | 2024.11.12 |