AWS(Amazon Web Services)

EC2 우분투 서버 스프링부트 파일업로드 경로 지정하기 No space left on device

dev.mk 2024. 6. 16. 18:50
반응형

에러의 발단

jar로 배포한 프로젝트에서 파일업로드시 계속 java.io.IOException: No space left on device 에러가 발생

이미지업로드 경로는 프로잭트 내부가아님 (/static/**)

프로젝트 외부 경로로 지정했을 때 해당 디렉토리에 충분한 저장공간이 있음에도 동일 증상 발생함.

 

결론 > 원인을 해결하지 못하고 톰캣으로 배포하니 정상적으로 파일업로드가 잘된다.

 

톰캣으로 배포하려면 기존 JAR를 WAR형식으로 빌드해야한다. 방법은 구글에 많으니 참고.

해결방법

putty 로 EC2 에 접속 후 임의의 파일업로드 경로 생성

mkdir -p /home/ubuntu/uploads

 

해당 디렉토리의 전체권한 부여

sudo chmod -R 777 /home/ubuntu/uploads

 

 

sprinboot application.yml

image:
  image-dir: /home/ubuntu/uploads/  #ec2의 파일업로드 경로
  image-url: http:/45.12.44.24:8090	#ec2 도메인

 

 

나는 @Value 어노테이션으로 전역에서 사용하기위해 yml에 따로 정의하였다.

 

WebMvcConfig.java

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void  addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/uploadImg/**")
                .addResourceLocations("file:///home/ubuntu/uploads/");
    }
}

 

addResourceHandler는 웹에서 접근할 URL경로이다

addResourceLocations는 실제파일이 존재하는 경로이다.

 

 

 

 

[FILE_TABLE]테이블에 [FILE_URL]컬럼에 값이

"http://45.12.44.24:8090/uploadImg/7ec3a00cc6ee42adbd248eec27280fb6.png"

이런식으로 들어가게 된다치면 front에서 img src에 바인딩만 해주면된다.

 

 

jar로 프로젝트 배포시 외부 경로를 참조못하는 이유는 좀더 파악해야겠다.

반응형