본문 바로가기
CLASS/SPRINGBOOT

#10-1 / CDN 이미지

by hingu 2024. 8. 28.

https://dev-eunse.tistory.com/291   여기서 + db 저장해볼거임

create table img(
idx int not null auto_increment,
imgname varchar(200) not null,
imgurl text not null,
imgdate timestamp not null default current_timestamp,
primary key(idx)
);

요렇게 table 만듬

 

  👀 cdn 이미지 

🤷‍♂️❓

cdn

이미지 호스팅 서비스

 

Cloud

1. 일반 Cloud 형태로 구성 : docker를 사용하는 형태 (물리 형태)

     Centos + mysql + JKD17 + tomcat + nginx

2. 가상 Cloud 형태로 구성 (VPC) : 가상 IP 할당 (논리 형태)

 

 

 

- cdn_upload.jsp  : 어제꺼 그대루

 

- cdn_dto

@Data
@Entity
@Table(name="img")
@NoArgsConstructor
@AllArgsConstructor
public class cdn_dto {
	@Id
	private int idx;
	
	private String imgname;
	
	private String imgurl;
	
	private String imgdate;
}

@Column 은 table 생성시에만 사용!

 

- cdn_repo.java  (interface)

public interface cdn_repo extends JpaRepository<cdn_dto, Integer>{
	@Query("select now()")
	String mysql_times();
}

JpaRepository<dto class명 , primary key 속성 작성 (int는 안먹음)>

 

- Controller

@Autowired
cdn_repo cdn_repo;

cdn_dto dto;

//cdn 서버로 이미지 및 컨텐츠 파일 전송 메소드
@PostMapping("/cdn_uploadok.do")
public String cdn_uploadok(ServletResponse res,Model m,
        @RequestParam(defaultValue="",required=false) String url,
        MultipartFile mfile) {
    res.setContentType("text/html;charset=utf-8");

    FTPClient ftp = new FTPClient(); //FTP 접속 클라이언트 객체 생성
    ftp.setControlEncoding("utf-8"); //한글파일 깨짐 방지
    FTPClientConfig fc = new FTPClientConfig(); //FTP 접속 환경설정
    try {
        String filename = mfile.getOriginalFilename(); //업로드 파일명
        String host = url; //FTP 호스트
        String user = "admin"; //FTP 접속 아이디
        String pw = "123123"; //FTP 접속 패스워드
        int port = 20021; //FTP 접속 포트번호

        ftp.configure(fc); //접속 환경을 새롭게 setting
        ftp.connect(host,port); //FTP 서버에 접속
        if(ftp.login(user, pw)) { //FTP 사용자에 맞게 접속 환경을 설정
            //file이 binary가 아니고 text(ascii)면 에러남
            //ftp.setFileType(FTP.ASCII_FILE_TYPE); //ascii 경우 (txt,html,css,css...)
            ftp.setFileType(FTP.BINARY_FILE_TYPE); //이미지 , 동영상, PDF, XLS..

            int result = ftp.getReplyCode(); //CDN서버에서 파일 업로드 지현형태 발생
            System.out.println("지연코드 :" + result);

            //FTP의 해당 디렉토리에 파일을 Stream 형태로 업로드 
            boolean ok = ftp.storeFile("/home/admin/cdn_upload_seeun/"+filename, mfile.getInputStream());
            System.out.println(ok);
            if(ok == true) {
                //요부분 추가 - 파일 업로드 후 db에 저장
                String fileurl = "http://172.30.1.16/cdn_upload_seeun/";
                this.dto = new cdn_dto();
                this.dto.setImgdate(filename);
                this.dto.setImgurl(fileurl);
                this.dto.setImgdate(cdn_repo.mysql_times());

                try {//예외처리 필수
                    cdn_dto result2 = cdn_repo.save(this.dto); //db저장
                    System.out.println("정상적으로 cdn 서버로 파일 업로드 완료했습니다.");
                }catch(Exception e) {
                    System.out.println("database 연결 실패 오류!");
                }
            }else {
                System.out.println("CDN 파일 업로드 실패");
            }
        }else {
            System.out.println("FTP ID 및 패스워드 오류 발생!");
        }
    }catch(Exception e) {
        System.out.println("CDN 서버 접속 오류 발생!!");
    }finally {
        try {
            ftp.disconnect(); //ftp 접속해제 필수
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return null;
}