UPLOAD
spring-framework MVC controller
에서 파일을 전송받을 아래와 같이 MultipartFile
형태를 사용하게 된다.
@PostMapping(value = "/upload", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
public ResponseEntity<?> addFiles(MultipartFile file) {
...
return ResponseEntity.ok(null);
}
파일을 저장하는 방법은 여러가지 이지만 아래와 같은 Method를 만들어 구현해 둔다면 편하게 호출하여 활용할 수 있다.
public void saveFiole(MultipartFile file, String directoryPath) throws IOException {
// parent directory를 찾는다.
Path directory = Paths.get(directoryPath).toAbsolutePath().normalize();
// directory 해당 경로까지 디렉토리를 모두 만든다.
Files.createDirectories(directory);
// 파일명을 바르게 수정한다.
String fileName = StringUtils.cleanPath(file.getOriginalFilename());
// 파일명에 '..' 문자가 들어 있다면 오류를 발생하고 아니라면 진행(해킹및 오류방지)
Assert.state(!fileName.contains(".."), "Name of file cannot contain '..'");
// 파일을 저장할 경로를 Path 객체로 받는다.
Path targetPath = directory.resolve(fileName).normalize();
// 파일이 이미 존재하는지 확인하여 존재한다면 오류를 발생하고 없다면 저장한다.
Assert.state(!Files.exists(targetPath), fileName + " File alerdy exists.");
file.transferTo(targetPath);
}
DOWNLOAD
항상은 아니지만 대부분 저장을 하면 당연히 다운로드도 할 것이다. 다운로드 컨트롤러는 이렇게 쉽게 만들 수 있다.
@GetMapping("/download/{id}")
public ResponseEntity<Resource> downloadMdssFile(
@PathVariable long id,
HttpServletRequest request) throws MalformedURLException {
MdssFile mdssFile = repository.findById(id).get();
Path filePath = Paths.get(mdssFile.getPath()).toAbsolutePath().normalize();
Resource resource = new UrlResource(filePath.toUri());
String contentType = null;
try {
contentType = request.getServletContext().getMimeType(
resource.getFile().getAbsolutePath()
);
}
catch (IOException ex) {
log.warn("Could not determine file type.");
contentType = "application/octet-stream";
}
return ResponseEntity.ok()
.contentType(MediaType.parseMediaType(contentType))
.header(
HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=\"" + mdssFile.getName() + "\""
)
.body(resource);
}
파일 업로드와 다운로드는 이렇게 쉽게 해결 가능하다. 끗!
'개발자의 정보 > Java & framework' 카테고리의 다른 글
spring-framework 관련 교육 영상 (0) | 2020.03.19 |
---|---|
리눅스 서버에서 spring-boot service 등록하기 (0) | 2020.03.09 |
ExecutorService를 이용해 multi thread 활용하기 (Java) (0) | 2020.02.19 |
spring framework ResourceHandler를 이용한 외부 디렉토리 파일 다운로드 (0) | 2020.02.16 |
Bean의 생성과 소멸에 발생되는 이벤트 (0) | 2020.02.13 |
Java에서 Jackson 사용중 JSON data에 특정 field 제외 하거나 포함하기 (0) | 2020.02.13 |
Simplified sorting in List (0) | 2020.02.12 |
데이터 변경 알림 - @EntityListeners (0) | 2020.02.11 |
댓글