이미지 업로드 코드를 짜던 중에 해당 문제가 발생.
하루 전까지만해도 잘됐는데 갑자기 안되어서 이해가 가지 않았지만 방법을 찾았다.
public static void createUploadDirectory(String directoryPath) {
File uploadDir = new File(directoryPath);
// 해당 경로가 없으면 폴더를 생성
if (!uploadDir.exists()) uploadDir.mkdir();
}
해당코드가 내 원래 코드. 해당 directoryPath에는 [밑으로]
///
private final String profilePath = "\\lookImg\\profileImg\\";
//
String todayDate = fileUploadUtil.getTodayDateString();
String uploadPath = profilePath+todayDate;
public static String getTodayDateString() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return sdf.format(date);
}
위와 같이 final static으로 선언해준 profilePath + 날짜를 String으로 바꿔준 todayDate로 uploadPath를 생성해서
해당 폴더가 없을 경우, 새로운 폴더를 만들 수 있도록 코드를 만들어주었다.
그런데 이상하게 에러가 나서
절대경로로 바꿔주는 처리를 하였다
public static void createUploadDirectory(String todayDate) {
// 우선 운영 체제에 따른 경로 구분자를 가져오기
String fileSeparator = System.getProperty("file.separator");
// 폴더 경로를 절대 경로로 지정
String uploadPath = "C:" + fileSeparator + "lookImg" + fileSeparator + "profileImg" + fileSeparator + todayDate;
// 폴더를 생성
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdirs();
}
}
솔직히 이해가 가지 않는다 절대 경로처럼 사용하기 위해서 server.xml에도
<Context docBase="C:/lookImg/" path="/lookImg" reloadable="true"/>
위와 같이 애초에 경로를 등록해주었기 때문이다. 그런데 지금 생각해보면... 이렇게 등록한게 제대로 안돌아갔던것 같다
실제로 파일을 만들어 주는
part.write("C:"+uploadPath+"\\"+newFileName);
이 코드를 찍어본 결과 정확하게 모든 경로가 잘 나왔기 때문이다. 그리고 위 상황을 변경했을때, 해당 코드는 오류 없이 잘돌아갔다...
원래는 완전하게 동적으로 바꿀 수 있도록 로직을 짜고 싶었는데 그나마 날짜라도 동적으로 바꿀 수 있어서 다행인걸까
서버에 애초에 미리 등록하고 했던 것이 문제였을까?
드라이브를 포함한 경로 구분자를 사용해서 절대 경로를 만들어서 업데이트 하니 이미지 업로드& 수정이 잘됐다.