반응형
중복된 파일 이름 해결하는 아이디어
- 파일 업로드 시간을 이용하는 방법
- UUID를 이용해 중복이 발생할 가능성이 적은 문자열을 생성하는 방법
1. 파일 업로드 시간을 이용해 파일 생성
private String getFolder() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
String str = sdf.format(date);
return str.replace("-", File.separator);
}
@PostMapping("/uploadAjaxAction")
public void uploadAjaxPost(MultipartFile[] uploadFile) {
String uploadFolder = "D:\\upload";
// make folder --------
File uploadPath = new File(uploadFolder, getFolder());
if (uploadPath.exists() == false) {
uploadPath.mkdirs();
}
// make yyyy/MM/dd folder
for (MultipartFile multipartFile : uploadFile) {
System.out.println("Upload File Name: " + multipartFile.getOriginalFilename());
System.out.println("Upload File Size: " + multipartFile.getSize());
String uploadFileName = multipartFile.getOriginalFilename();
// IE의 경우 전체 파일 경로가 전송되므로, 마지막 \를 기준으로 잘라낸 문자열이 실제 파일 이름이 된다.
uploadFileName = uploadFileName.substring(uploadFileName.lastIndexOf("\\") + 1);
// File saveFile = new File(uploadFolder, uploadFileName);
File saveFile = new File(uploadPath, uploadFileName);
try {
multipartFile.transferTo(saveFile);
} catch (Exception e) {
System.out.println(e.getMessage());
} // end catch
} // end for
}
- getFolder()
- 오늘 날짜의 경로를 문자열로 생성한다.
- 생성된 경로는 폴더 경로로 수정된 뒤에 반환한다.
- 2022-02-22인 경우
D:\upload\2022\02\02 폴더 생성 후 파일이 저장된다.
2. UUID 적용
@PostMapping("/uploadAjaxAction")
public void uploadAjaxPost(MultipartFile[] uploadFile) {
String uploadFolder = "D:\\upload";
// make folder --------
File uploadPath = new File(uploadFolder, getFolder());
if (uploadPath.exists() == false) {
uploadPath.mkdirs();
}
// make yyyy/MM/dd folder
for (MultipartFile multipartFile : uploadFile) {
String uploadFileName = multipartFile.getOriginalFilename();
// // IE의 경우 전체 파일 경로가 전송되므로, 마지막 \를 기준으로 잘라낸 문자열이 실제 파일 이름이 된다.
uploadFileName = uploadFileName.substring(uploadFileName.lastIndexOf("\\") + 1);
UUID uuid = UUID.randomUUID();
uploadFileName = uuid.toString() + "_" + uploadFileName;
File saveFile = new File(uploadPath, uploadFileName);
try {
multipartFile.transferTo(saveFile);
} catch (Exception e) {
System.out.println(e.getMessage());
} // end catch
} // end for
}
- make folder 부분은 위 날짜 폴더를 생성하는 부분인데 생략해주어도 된다.
- 나중에 '_'를 기준으로 분리하면 원래 파일 이름을 파악할 수 있다.
반응형
'ETC' 카테고리의 다른 글
Spring + Ajax 파일 다운로드 (0) | 2022.09.26 |
---|---|
Spring + Ajax 섬네일 파일 생성, 이미지 파일인지 구분, 이미지 클릭 시 원본 이미지 출력 (0) | 2022.09.25 |
Spring + Ajax 파일 확장자, 크기 제한 (Ajax) (0) | 2022.09.25 |
Spring + Ajax 파일 업로드 (0) | 2022.09.25 |
[SpringMVC + MyBatis + MySql] 게시판 댓글 수 게시판 List에 출력 (0) | 2022.09.25 |