티스토리 뷰
File newFile = new File(path, fileName); if(!newFile.exists()){ newFile.mkdirs(); newFile.createNewFile(); }
리눅스에서는 파일에 생성에 대한 기본권한이 644 이다. (폴더의 기본 권한은 755)
umask 라는 커맨드에서 초기값이 022로 되어있는데..
이것을 토대로 폴더(디렉토리)는 777-022 = 755
파일은 666-022 = 644
파일이 666인 이유는 etc쪽의 설정파일에서 설정 값을 잡고 있는 듯 하다.
644란
100의 자리 숫자인 6은 root사용자의 권한을 나타내고
10의 자리 숫자인 4는 그룹에 속한 사용자를 나타낸다.
그리고 1의 자리 숫자인 4는 그 외의 사용자를 지칭한다.
파일이나 폴더에 대한 허가권으로 최대값을 777로 가질 수 있으며,
7은 4(읽고),2(쓰고),1(접근,생성) 이다.
어쨋든 파일 업로드 구현시에 서버에 저장할 파일을
그냥 File객체의 createNewFile(); 만으로 진행하려고 한다면(위 상단의 코드처럼)
허용하지 않는다는 permission denied가 로그에 뜨게되고, 예외를 발생시키고 , 끝으로 파일은 저장되지 않을 것이다.
방법은 저장하기 전에(createNewFile(); 하기 전에) 파일에 대한 권한을 최고권한인 777로 변경해주면 문제가 해결 될 것이다.
File newFile = new File(path, fileName); if(!newFile.exists()){ newFile.mkdirs(); Runtime.getRuntime().exec("chmod 777 " + path+fileName); newFile.setExecutable(true, false); newFile.setReadable(true, false); newFile.setWritable(true, false); System.out.println("newFile.canWrite()>>>>>>>>>>"+ newFile.canWrite()); System.out.println("newFile.canExecute()>>>>>>>>>>"+ newFile.canExecute()); newFile.createNewFile(); }
추가
위처럼 해도 해결이 안된다면...
폴더의 소유권을 톰캣으로 변경한다.
만약
리눅스 서버측에서 파일 업로드 경로가
/webpro/resources/images
라면
cd /webpro/resources/images 명령어로 해당 디렉토리로 이동 후
chown -R tomcat.tomcat *
명령어를 이용해서 현재 위치한 폴더와 그 하위에 생성되는 모든 파일 및 디렉토리에 대하여
소유권한을 tomcat으로 변경한다.