티스토리 뷰

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으로 변경한다.


Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday