본문 바로가기

BE/Spring

[Spring] 파일 업로드, 다운로드

 

 

 

 

 

파일 업로드, 다운로드

파일 세팅 ( FileService 인터페이스는 따로 사용하지 않으므로 생략 )

 

파일 세팅

 

pom.xml 파일에 프로젝트의 버전 변경 >> maven 프로젝트 업데이트 >> 한글 인코딩 작업 실행

 

이제 파일 업로드, 다운로드에 필요한 라이브러리를 추가할 것임

 

commons fileupload 라이브러리 추가할 것 >> 1.3.3 버전 >> pom.xml 에 추가

 

입, 출력을 담당하는 라이브러리 >> 2.4 버전 >> pom.xml 에 추가

 

class 파일로 bean 객체를 추가

 

기존에 servlet-context.xml 에서 빈 객체를 등록하던 방식을 클래스 파일에서 어노테이션을 사용해서 등록하여 사용

( 위 xml 파일은 어노테이션을 활용해서 작성하는 방법을 설명하기 위해 작성했으므로 xml 파일 내 빈 객체 등록 부분은 주석처리 하였음 )

 

파일 업로드 경로 작성 >> uploadForm.jsp 에 업로드 폼 작성 >> 파일 전송 시 이동될 경로 작성

 

Controller 에도 파일 받아서 처리할 url 경로 작성 및 넘어온 파일을 변수로 담아서 출력해봤음 >> service 쪽으로 받은 파일을 넘겨줌

 

파일 저장 로직 완성 ( 파일 명 앞에 저장 시간을 년월일시분초 형식으로 붙인 뒤 변수로 저장 경로를 지정하여 저장 )

 

 

 

 

 

DB 에 저장한 이미지의 이름을 저장해볼 것임

create table file_image(
    id varchar(20) primary key,
    name varchar(20),
    img_name varchar(100) 
);

sql 문 작성 및 실행

 

▼ DB 연동 작업 ▼

DB 연동에 필요한 라이브러리 추가

 

root-context.xml 작성

 

fileMapper.xml 세팅

 

▲ DB 연동 세팅 완료 ▲

 

DB 와 연동할 객체 DTO 작성

 

파일을 저장하지 않으면 DB 에 nan 으로 처리, 파일을 저장한다면 파일 명을 DB 에 저장

 

FileMapper 인터페이스에 메소드 추가

 

FileMapper.xml 파일에 sql 문 작성

 

FileMapper.xml 파일에 namespace 를 설정해주지 않아서 다시 고침

 

이미지 파일 전송해보니 정상적으로 파일 이름 DB 에 저장되는 모습

 

파일 저장도 되는 모습

 

( 현재 테이블에 id 값을 primary key 로 지정해놓아서 동일한 아이디로 파일 업로드를 하면 무결성 조건 에러가 발생되는데 이때, 정상적으로 파일은 디렉토리에 저장되지만 DB 에 파일명을 저장할때 무결성 조건 에러를 만나면서 DB 에 파일명이 저장되지는 않는다,,,, )

 

 

 

 

 

파일을 jsp 파일에 출력해볼 것임

경로 생성

 

Controller 에서 model 객체를 Service 에 전달, Service 에서는 Mapper 를 사용해 데이터를 가져와서 model 에 저장할 것임

 

 

FileMapper.xml 에 select 문 작성 ( resultMap 을 사용해서 컬럼명과 변수를 Mapping )

 

전달받은 데이터를 forEach 문으로 화면에 출력

 

다운로드와 이미지 출력 구현

 

download 경로를 컨트롤러에 작성 및 download 기능을 구현

 

 

 

 

 

파일 삭제 기능 추가

result.jsp 에 파일 별로 a 삭제할 경로와 파일 출력할 img 태그 추가

 

delete 경로로 들어왔을때 file 명과 id 값을 받아서 service 로 전달

 

service 에서는 mapper 로 id 값을 전달하여 db 에 저장된 파일정보를 삭제, 디렉토리 내의 파일은 service 에서 삭제

 

 

FileMapper.xml 에 sql 문 작성

 

코드 실행 영상

 

728x90
728x90