반응형
전자정부프레임워크를 활용하여 파일 업로드와 다운로드 기능을 구현하는 방법을 학습합니다. 이 기능은 사용자로부터 파일을 수집하거나, 저장된 파일을 제공하는 웹 애플리케이션에서 매우 중요한 역할을 합니다.
1. 파일 업로드 구현
1-1. 라이브러리 설정
전자정부프레임워크에서는 파일 업로드를 위해 Apache Commons FileUpload 라이브러리를 사용합니다. 이 라이브러리가 포함되어 있는지 확인합니다.
pom.xml
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
1-2. 파일 저장 경로 설정
파일이 저장될 디렉터리를 설정합니다.
- 경로: /uploads
- 실제 위치: src/main/webapp/uploads
application.properties (Spring Boot 기반)
file.upload.dir=uploads/
1-3. 컨트롤러 작성
파일 업로드를 처리하는 컨트롤러입니다.
FileUploadController.java
@Controller
@RequestMapping("/file")
public class FileUploadController {
@Value("${file.upload.dir}")
private String uploadDir;
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file, Model model) {
if (file.isEmpty()) {
model.addAttribute("message", "파일을 선택해주세요.");
return "uploadForm";
}
try {
String filePath = uploadDir + file.getOriginalFilename();
File dest = new File(filePath);
file.transferTo(dest);
model.addAttribute("message", "파일 업로드 성공: " + file.getOriginalFilename());
} catch (IOException e) {
model.addAttribute("message", "파일 업로드 실패: " + e.getMessage());
}
return "uploadResult";
}
}
1-4. 업로드 화면 작성
uploadForm.jsp
<form action="/file/upload" method="post" enctype="multipart/form-data">
<label for="file">파일 선택:</label>
<input type="file" id="file" name="file">
<button type="submit">업로드</button>
</form>
uploadResult.jsp
<p>${message}</p>
2. 파일 다운로드 구현
2-1. 컨트롤러 작성
파일 다운로드를 처리하는 컨트롤러입니다.
FileDownloadController.java
@Controller
@RequestMapping("/file")
public class FileDownloadController {
@Value("${file.upload.dir}")
private String uploadDir;
@GetMapping("/download/{fileName}")
public ResponseEntity<Resource> downloadFile(@PathVariable String fileName) {
try {
File file = new File(uploadDir + fileName);
if (!file.exists()) {
throw new FileNotFoundException("파일을 찾을 수 없습니다: " + fileName);
}
Path filePath = file.toPath();
Resource resource = new UrlResource(filePath.toUri());
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getName() + "\"")
.body(resource);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(null);
}
}
}
2-2. 다운로드 링크 생성
downloadPage.jsp
<a href="/file/download/sample.txt">sample.txt 다운로드</a>
3. 테스트 및 결과 확인
3-1. 업로드 테스트
- /file/upload로 접속합니다.
- 파일을 선택하고 업로드 버튼을 클릭합니다.
- 업로드 성공 메시지가 나타나고 파일이 /uploads 디렉터리에 저장됩니다.
3-2. 다운로드 테스트
- /file/download/sample.txt로 접속합니다.
- 브라우저에서 파일이 다운로드됩니다.
4. 파일 관리 시 유의사항
- 파일 이름 중복 방지
업로드 파일 이름에 타임스탬프나 UUID를 추가하여 중복 파일 이름 문제를 방지합니다. - 보안
- 사용자가 파일 경로를 조작하지 못하도록 입력값 검증을 철저히 수행합니다.
- 업로드 가능한 파일 형식을 제한합니다.
- 파일 크기 제한
MultipartResolver를 통해 최대 파일 크기를 제한합니다.<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10485760" /> <!-- 10MB --> </bean>
- 파일 삭제 기능 제공
업로드된 파일을 관리할 수 있도록 삭제 기능을 추가합니다.
5. 마무리
오늘 학습한 파일 업로드 및 다운로드 기능은 다양한 웹 애플리케이션에서 활용할 수 있는 핵심적인 기능입니다. 다음에서는 로그 기능과 예외 처리를 구현하는 방법을 학습합니다.
반응형
'개발 > 전자정부프레임워크' 카테고리의 다른 글
Ajax를 활용한 비동기 통신 구현 (0) | 2024.12.25 |
---|---|
전자정부프레임워크에서 로그 기능 및 예외 처리 구현 (0) | 2024.12.25 |
전자정부프레임워크에서 공통 코드 관리 및 메시지 처리 (2) | 2024.12.24 |
전자정부프레임워크의 화면 구성 및 템플릿 활용 (0) | 2024.12.24 |
전자정부프레임워크의 로그 기능 구현 (0) | 2024.12.24 |