본문 바로가기
프레임워크

파일 업로드 & 다운로드

by do_ng 2020. 11. 30.

다운로드 : 해당 파일을 다운로드 시 서버에 있는 파일을 다운로드하여 자신의 PC에 저장하는 것 

업로드 : 자신의 PC에 있는 파일을 해당 서버에 올리는 것 

 

<파일 업로드 방법> 

 

1.업로드시 해당 첨부파일의 정보를 저장할 테이블을 만들어준다. 

create table tb_file(
IDX int primary key auto_increment, -- 첨부파일이 저장되는 고유번호 
BOARD_IDX int not null, -- 게시글 번호 
ORIGINAL_FILE_NAME varchar(260) not null, -- 원본 파일 이름
STORED_FILE_NAME varchar(300) not null, -- 서버에 저장될 파일 이름 
FILE_SIZE int not null -- 파일 용량 
);

 

설명)

- BOARD_IDX는 해당 게시글에 업로드된 첨부파일들을 나타냄 

- 파일을 업로드하면 해당 파일을 서버의 파일 저장소에 저장을 하는데 만약 파일이름이 같을 경우 똑같은 파일이름으로 충돌이 일어나 문제가 발생할수 있다.. 따라서 파일을 저장할 때는 원본파일의 이름과 서버에 저장될 파일이름(중복되지 않는 파일명)을 DB에 저장해놓고 실제 저장될 파일(서버에 저장될 파일)을 서버의 파일저장소에 저장을 시킴 

 

2. 클라이언트(화면)에서 전송된 파일을 받아서 서버의 파일 저장소에 저장하는 방법

 

컨트롤러 설명)

- HttpServletRequest 통해 사용자가 업로드한 파일 정보를 가져올수 있음 

- 로그를 통해서 클라이언트가 업로드한 파일정보를 확인함 

- 파일 업로드에 대한 구체적인 작업은 서비스에서 할 것이기 때문에 서비스에게 넘겨줌 

 

서비스단)

- 게시판에 글을 올리는 것뿐만 아니라 첨부파일도 업로드할 수 있기 때문에 (작성된 게시글이 DB에 저장되는 부분) ,

(작성된 게시글에 업로드한 첨부파일 정보가 DB에 저장되는 부분) 총 2가지의 작업이 수행되는데 이두가지의 정보는 하나의 작업으로 실행되어야 함(트랜잭션이 적용되어야 하겠지?? - 2가지 작업 중 하나라도 실패하면 수행된 작업은 Rollback 해서 되돌리고 2가지 작업을 하기 전의 상태로 되돌아 가야 됨) 

- fileUtils.parseInsertFileInfo(boardMap, request) 부분은 클라이언트가 업로드한 파일을 서버의 파일 저장소에 저장하는 부분이라 생각하면 됨 

 

<파일 다운로드> 

컨트롤러
서비스

1.해당 게시글의 첨부파일 다운로드를 클릭시 DB에서 해당 첨부파일이 있는지 조회를 한후 있을 경우 Map으로 해당 첨부파일 정보를 저장를 한다

2. 서버로부터 실제로 저장되어있는 파일을 Byte 단위로 변환을 한후 Response(응답)을 통해 클라이언트가 요청한 첨부파일을 다운로드 받을 수 있도록 세팅을 해준다. 

 

 

추가로 공부해야 할것)

1.Map에 관한 공부 , 컬렉션 프레임워크에 관한 개념을 다시 확실하게 알고가자 

2.시간이 남으면 파일에 관련된 예외처리나 보안에 관련된 문제들도 짚고 넘어가자 

3.첨부파일을 서버에 저장하지 않고 BLOB 같은 것들에 대해서 조사하기 

'프레임워크' 카테고리의 다른 글

@Resource 란?  (0) 2020.12.25
업로드한 파일 수정  (0) 2020.11.30
스프링의 MVC 패턴  (0) 2020.11.26
스프링이란 무엇인가?  (0) 2020.11.26
useGeneratedKeys,keyProperty 사용법  (0) 2020.11.26