본문 바로가기
I LEARNED/TIL

[TIL] [troubleshooting] Permission denied,리눅스에서의 권한 허가 거부

by veganwithbacon 2022. 10. 5.
반응형

Springboot에서 이미지를 업로드 과정에서 생긴 문제이다.

이미지를 리사이징 하는 과정에서 파일을 새롭게 만드는 코드가 있었는데,계속 그 부분에서 에러가 팡팡터졌다.

 

이상하게 로컬에서는 잘되다가 서버만 연결하면 에러가 발생했다.

이미지를 포함한 게시글을 올릴 때 지속해서 에러가 발생했다.

 

java.io.IOException : Permission denied를 검색해보니 IOException은 input/output시에 생기는 에러였고, Permission denied는 리눅스에서의 허가 거부였다.

 

Springboot에서 이미지파일을 리사이징할 때 리눅스 서버에 새로운 파일을 만드는 로직을 넣었었는데,
거기서 에러가 같이 터졌다.

resizedImage.setExecutable(true, false);
resizedImage.setReadable(true, false);
resizedImage.setWritable(true, false);
Runtime.getRuntime().exec("chmod 777 " + "/tmp/"+fileName);

해당 코드를 통해 리눅스에서 Owner외에 다른 유저들에게 권한을 줄 계획이었다! 

근데 역시나 원하는 대로 한 번에 될 리가 없다.. 
어떠한 이유에서인지 코드가 적용이 되지를 않아서 프로젝트 완성이 우선시되다보니 파일에 권한을 부여하는 것에 있어서는 시간이 오래 걸릴 것 같아 방법을 우회했다.

나는 적용하지 못했으나  위 방법을 적용하려고 할 때 참고한 블로그다.

https://codedragon.tistory.com/6324

 

File 클래스의 주요 메서드, 분류별 File 클래스의 메소드- File 생성/수정/삭제 메소드, File 체크 메

File 클래스의 주요 메서드 exists( )의 반환값이 false이면 createNewFile(), mkdir(), mkdirs()메소드로 파일 또는 디렉토를 생성할 수 있습니다. exists( )의 반환값이 true이면 파일에 대한 정보를 확인할 수..

codedragon.tistory.com

 

암모턴, 위 방법 대신 사용한 방법은   ByteArrayOutputStream를 사용하는 것이다.

 

일반적으로 ByteArrayInputStream ByteArrayOutputStream은 메모리, 즉 바이트 배열에 데이터를 입출력하는데 사용되는 스트림이다. 주로 다른곳에 입출력하기 전에 데이터를 임시로 바이트 배열에 담아서 변환등의 작업을 하는데 사용된다.

ByteArrayOutputStream을 사용한 후에 리사이징+서버에서 발생하던 문제 모두 해결되었다.

혹시 필요한 이들을 위해 코드를 첨부했다. 

 

세상은 넓고 치킨 먹고 싶다..코드만 작성하면 배고프다

갑자기 뭔소리냐구요?! 배고파서 그렇습니다.

읽어봐주셔서 감사합니다

반응형

댓글