FileProcessor
해당 프로젝트에서 파일(주로 이미지 파일) 이름을 편집하고 저장하는 등의 역할을 하는 클래스
1. FileProcessor
■ FileProcessor
[FileProcessor]
import com.hipo.exception.IllegalRequestException;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Component
public class FileProcessor {
public String storeFile(MultipartFile multipartFile, String path) throws IOException {
String storeFilename = createStoreFileName(multipartFile.getOriginalFilename());
String fullPath = getFullPath(path, storeFilename);
multipartFile.transferTo(new File(fullPath));
return storeFilename;
}
private String createStoreFileName(String originalFilename) {
String uuid = UUID.randomUUID().toString();
String ext = extracted(originalFilename);
return uuid + "." + ext;
}
public String extracted(String originalFilename) {
int pos = originalFilename.lastIndexOf(".");
return originalFilename.substring(pos + 1);
}
public String getFullPath(String path, String storeFilename) {
return path + storeFilename;
}
public String getMediaType(String fileName) {
String extracted = extracted(fileName);
if (extracted.equals("jpeg") || extracted.equals("JPEG")) {
return MediaType.IMAGE_JPEG_VALUE;
}
if (extracted.equals("png") || extracted.equals("PNG")) {
return MediaType.IMAGE_PNG_VALUE;
}
throw new IllegalRequestException("확장자가 jpeg 또는 png가 아닙니다.");
}
}
□ storeFile
[storeFile]
public String storeFile(MultipartFile multipartFile, String path) throws IOException {
//[1]
String storeFilename = createStoreFileName(multipartFile.getOriginalFilename());
String fullPath = getFullPath(path, storeFilename); //[2]
multipartFile.transferTo(new File(fullPath)); //[3]
return storeFilename; //[4]
}
파일을 지정된 경로에 저장한다.
● [1] : multipartFile을 받아서 UUID로 새로운 파일 이름을 생성한다(createSotreFileName() = 내부 메서드).
● [2] : path와 저장될 파일의 이름인 storeFilename을 합쳐 파일이 저장될 전체 경로를 생성한다(getFullPath() = 내부 메서드).
● [3] : 앞서 구한 전체 경로에 파일을 저장한다.
● [4] : 저장된 파일의 이름을 반환
□ createStoreFileName
[createStoreFileName]
private String createStoreFileName(String originalFilename) {
String uuid = UUID.randomUUID().toString(); //[1]
String ext = extracted(originalFilename); //[2]
return uuid + "." + ext; //[3]
}
파일 이름을 받아서 저장될 파일 이름을 새롭게 생성하고 반환한다(저장될 파일들은 이름이 겹치면 안 되기 때문).
● [1] : UUID패턴을 생성한다.
● [2] : 기존 파일 이름에 확장자를 추출한다(extracted() = 내부 메서드).
ex) test.png -> "png" 추출
● [3] : UUID.확장자 형식의 파일 이름 반환
□ extracted
[extracted]
public String extracted(String originalFilename) {
int pos = originalFilename.lastIndexOf(".");
return originalFilename.substring(pos + 1);
}
"."을 기준으로 파일이름에 있는 확장자를 추출하고 반환한다.
□ getFullPath
[getFullPath]
public String getFullPath(String path, String storeFilename) {
return path + storeFilename;
}
경로와 저장될 파일이름을 받아서 파일이 저장될 경로를 반환
□ getMediaType
[getMediaType]
public String getMediaType(String fileName) {
String extracted = extracted(fileName);
if (extracted.equals("jpeg") || extracted.equals("JPEG")) {
return MediaType.IMAGE_JPEG_VALUE;
}
if (extracted.equals("png") || extracted.equals("PNG")) {
return MediaType.IMAGE_PNG_VALUE;
}
throw new IllegalRequestException("확장자가 jpeg 또는 png가 아닙니다.");
}
파일의 확장자에 따라 MediaType을 반환하는 메서드
추후에 API로 이미지를 반환할 때 파일에 붙은 확장자에 따라 Http response의 header에 MediaType을 정해줘야 할 때 사용
'프로젝트 > PongGame' 카테고리의 다른 글
EntityListeners (0) | 2022.04.28 |
---|---|
LoginAccountIdArgumentResolver (0) | 2022.04.28 |
Spring Security, JWT, 인증, 인가 (5) | 2022.04.18 |
Account 생성 (0) | 2022.04.14 |
build.gradle, application.yml (0) | 2022.04.13 |
댓글