반응형

프로젝트를 만들다가 이미지를 저장하고 불러와서 사용할일이생겼다. 

처음에는 resource폴더에 이미지를 저장했는데 프로젝트의 resources 폴더는 static한 폴더라서 저장을하고 다시 빌드를 해야 해당이미지를 불러올수있었다. 그래서 프로젝트에 이미지 저장용 폴더를 만들고 저장을 하고 불러오려고하니 에러가 발생했다. 그래서 찾아보니 파일의 위치를 받아서 엔드포인트로 접근할수있게 해주는 config 설정이 있었다. 

 

@Configuration
@Slf4j
public class WebConfig implements WebMvcConfigurer {
public static String UPLOAD_PATH = "file:///C:/Users/kimad/Desktop/JavaPortpolio/chatApp/chat_app_imgs/";
	
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/imgs/**")
                .addResourceLocations(UPLOAD_PATH);
    }
}

 

이렇게 작성해주면 해당 경로에있는 파일을 imgs/ 파일이름 으로 접근이 가능해진다.

 

@Service
@RequiredArgsConstructor
@Slf4j
public class UploadService {

    //외부폴더
    public static String UPLOAD_PATH = "file:///C:/Users/kimad/Desktop/JavaPortpolio/chatApp/chat_app_imgs/";
    private String uploadPath = "C:/Users/kimad/Desktop/JavaPortpolio/chatApp/chat_app_imgs/";

    public static String createFileName(MultipartFile file){
        return UUID.randomUUID() + "_" + file.getOriginalFilename();
    }

    public void saveFile(MultipartFile file,String fileName) {
        try {
            file.transferTo(new File(uploadPath, fileName));
        } catch (IOException e) {
            log.error("Error occurred while saving file: {}", e.getMessage(), e);
        }
    }

    // 파일 삭제 메서드
    public void deleteFile(String fileName) {
        try {
            File file = new File(uploadPath, fileName);
            if (file.delete()) {
                log.info("{} 파일 삭제 성공", fileName);
            } else {
                log.warn("{} 파일 삭제 실패", fileName);
            }
        } catch (Exception e) {
            log.error("Error occurred while deleting file: {}", e.getMessage(), e);
        }
    }

    public void updateFile(String oldFileName,MultipartFile newFile,String newFileName){
        if(!newFile.isEmpty()){
            //새로운 이미지가 업데이트 되는경우

            //기존이미지를 삭제
            deleteFile(oldFileName);
            //새로운 이미지를 추가
            saveFile(newFile,newFileName);
        }
    }
}
반응형

+ Recent posts