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
암모턴, 위 방법 대신 사용한 방법은 ByteArrayOutputStream를 사용하는 것이다.
일반적으로 ByteArrayInputStream과 ByteArrayOutputStream은 메모리, 즉 바이트 배열에 데이터를 입출력하는데 사용되는 스트림이다. 주로 다른곳에 입출력하기 전에 데이터를 임시로 바이트 배열에 담아서 변환등의 작업을 하는데 사용된다.
ByteArrayOutputStream을 사용한 후에 리사이징+서버에서 발생하던 문제 모두 해결되었다.
혹시 필요한 이들을 위해 코드를 첨부했다.
세상은 넓고 치킨 먹고 싶다..코드만 작성하면 배고프다
갑자기 뭔소리냐구요?! 배고파서 그렇습니다.
읽어봐주셔서 감사합니다
'I LEARNED > TIL' 카테고리의 다른 글
[TIL] 참여하기와 게시물 (0) | 2022.10.09 |
---|---|
[TIL] [troubleshooting] findAll을 지양해야 하는 이유 (0) | 2022.10.06 |
[TIL] [troubleshooting] 엔진엑스 연결 후 왜 1MB이상의 파일이 안올라갈까? (1) | 2022.10.03 |
[TIL] [troubleshooting] java.net.SocketTimeoutException: connect timed out 에러 해결 (0) | 2022.09.27 |
[TIL] [troubleshooting]@RequestPart(required = false) (0) | 2022.09.15 |
댓글