- FileUploadMultipartService.java
/**
* MultipartFile을 이용한 파일 업로드 구현
*/
@Service
@Slf4j
public class FileUploadMultipartService {
@Autowired
@Qualifier("fileUploadExecutor")
private ExecutorService executorService;
@Value("${file.upload-dir}")
private String uploadDir;
/**
* (방법2) 비동기 파일 업로드
*/
@Async
public void uploadFileAsync(MultipartFile file) throws IOException {
// 고유한 파일 이름 생성
String uniqueFilename = generateUniqueName(file).get("uniqueFileName");
File destinationFile = new File(uploadDir + File.separator + uniqueFilename);
file.transferTo(destinationFile);
log.info("Async File uploaded : {}", file.getOriginalFilename());
}
/**
* 고유한 파일 이름 생성
*/
private Map<String, String> generateUniqueName(MultipartFile file) {
Map<String, String> map = new HashMap<>();
String originalFilename = file.getOriginalFilename();
String fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
String uniqueFilename = UUID.randomUUID().toString() + fileExtension;
map.put("fileExtension", fileExtension);
map.put("uniqueFilename", uniqueFilename);
log.error("@@@@map:" + map.get("uniqueFilename"));
return map;
}
private boolean isImageFile(String fileExtension) {
String lowerCaseExtension = fileExtension.toLowerCase();
return lowerCaseExtension.equals(".jpg") || lowerCaseExtension.equals(".jpeg") || lowerCaseExtension.equals(".png") || lowerCaseExtension.equals(".gif");
}
}
- FileUploadController.java
@Slf4j
@RestController
@RequestMapping("/files/upload")
public class FileUploadController {
private final String EP_ADD_FILES_MULTIPART = "/multipart";
private final String EP_ADD_FILES_MULTIPART_ASYNC = "/multipart-async";
@PostMapping(value = EP_ADD_FILES_MULTIPART_ASYNC, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public BaseResponse<List<String>> uploadFileAsync(@RequestParam("files") ArrayList<MultipartFile> files) {
BaseResponse response = new BaseResponse();
for (MultipartFile file : files) {
try {
fileUploadMultipartService.uploadFileAsync(file);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return response;
}
}
'Web' 카테고리의 다른 글
[springboot] Multipart로 다중 파일 업로드하기 (0) | 2024.06.26 |
---|---|
[springboot] 설정 클래스 알아보기 (0) | 2024.06.18 |
[springboot] 10가지 응답처리 방식 (동기, 비동기 및 스트리밍 응답) (0) | 2024.06.11 |
[springboot] Spring Security 6.x로 소셜 로그인 구현하기 (oauth2) (1) | 2024.06.08 |
[springboot] Spring Security 6.x로 로그인 구현하기 (jwt 인증) (0) | 2024.06.05 |