초급의 끄적거림

[Spring] 파일 업로드 게시판 본문

Framework/Spring

[Spring] 파일 업로드 게시판

codingD 2019. 10. 17. 18:05

1. 파일 업로드/다운로드 게시판


 1-1) Spring Legacy Project - mymelon 

- kr.co.mymelon으로 mymelon 프로젝트 생성
- pom.xml → oracle 라이브러리, 파일 업로드/다운로드 라이브러리 추가 
- web.xml → 한글 인코딩
- servlet-context.xml → <resources mapping ~~> 대신<default-servlet-handler> 추가                           
                           → beans 태그의 prefix = "/" 로 변경
- webapp 에 css, images, js, media, sql 폴더 생성
- DB를 붙여야하기 때문에 DBPKG 복사 붙여넣기

 

 1-2) sql문 생성

  ★ 잊지 말고 commit; 

 CREATE TABLE media ( 

    mediano  NUMBER        NOT NULL PRIMARY KEY,          -- 미디어 번호 

    title    VARCHAR2(255) NOT NULL,                      -- 제목 

    poster   VARCHAR2(255) DEFAULT 'poster.jpg' NOT NULL, -- 포스터 이미지 

    filename VARCHAR2(255) NOT NULL,                      -- 음원 파일명 

    filesize NUMBER        DEFAULT 0 NOT NULL, 

    mview    CHAR(1)       DEFAULT 'Y' NOT NULL,          -- 출력모드 

    rdate    DATE          NOT NULL                       -- 등록일 

 );

 

HomeController.java

 - mymelon/src/main/java/kr.co.mymelon.HomeController.java
 - 객체 생성 확인

- redirect 뷰
 : 뷰 이름에 "redirect: 접두어 " 가 붙으면 지정한 페이지로 리다이렉트 된다.

방식)
1. redirect : /bbs/list  - 현재 서블릿 컨텍스트에 대한 상대적인 경로로 리다이렉트
2. redirect : http://host/bbs/list - 지정한 절대 URL로 리다이렉트
package kr.co.mymelon;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class HomeController {
	public HomeController() {
		System.out.println("-----HomeController() 객체 생성 됨");
	}//HomeController() end
    
    //mymelon 프로젝트 첫 페이지 호출 명령어 등록
    //http://localhost:8090/mymelon/home.do
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public ModelAndView home(){
    	ModelAndView mav=new ModelAndView();
        //redirect → 등록된 명령어를 호출한다
        mav.setViewName("redirect:/media/list.do");
        return mav;
    }//home() end
}//class end

 

MediaDTO.java

- mymelon/src/main/java/kr.co.mymelon.media.MediaDTO.java

- dto에 담아서 사용하기 위해서 MediaDTO에 postMF, filenameMF 추가
- getter, setter 추가
package kr.co.mymelon.media;

import org.springframework.web.multipart.MultipartFile;

public class MediaDTO {
	private int mediano;
	private String title;
	private String poster;
	private String filename;
	private long filesize;
	private int mview;
	private String rdate;
	
//-------------------------------------------------------------------------------------------------------------
	//스프링 파일 객체 멤버변수
	//매개변수 dto를 받기 위해서는 동일한 이름이 필드 DTO에 있어야하고 getter, setter가 필요함 
	//createForm.jsp 의 포스터 : <input type='file' name='postMF'> → 동일한 name이 필요하기 때문에 postMF 그대로 사용
	private MultipartFile posterMF;
	
	//createForm.jsp 의 미디어파일 :  <input type='file' name='filenameMF'>
	private MultipartFile filenameMF;
//-------------------------------------------------------------------------------------------------------------
	public int getMediano() {
		return mediano;
	}
	public void setMediano(int mediano) {
		this.mediano = mediano;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getPoster() {
		return poster;
	}
	public void setPoster(String poster) {
		this.poster = poster;
	}
	public String getFilename() {
		return filename;
	}
	public void setFilename(String filename) {
		this.filename = filename;
	}
		
	public long getFilesize() {
		return filesize;
	}
	public void setFilesize(long filesize) {
		this.filesize = filesize;
	}
	public int getMview() {
		return mview;
	}
	public void setMview(int mview) {
		this.mview = mview;
	}
	public String getRdate() {
		return rdate;
	}
	public void setRdate(String rdate) {
		this.rdate = rdate;
	}
	
	
	public MultipartFile getPosterMF() {
		return posterMF;
	}
	public void setPosterMF(MultipartFile posterMF) {
		this.posterMF = posterMF;
	}
	public MultipartFile getFilenameMF() {
		return filenameMF;
	}
	public void setFilenameMF(MultipartFile filenameMF) {
		this.filenameMF = filenameMF;
	}
	
	
}//class end

 

servlet-context.xml

- 파일 전송이 있는 경우 스프링빈 등록
    CommonsMultipartResolver → 전송된 파일을 읽어서 MultipartFile 객체로 변환
- <resources mapping ~~> 대신 <default-servlet-handler> 추가                           
   beans 태그의 prefix = "/" 로 변경

 

 

MediaCont.java

 - mymelon/src/main/java/kr.co.mymelon.media.MediaCont.java

- get 방식, post 방식으로 진행
- 순서 
 1) pom.xml → 파일 업로드 / 다운로드 관련 의존성 추가
 2) MediaDTO → postMF, filenameMF 필드 추가후 getter,와 setter 함수 생성
 3) servlet-context.xml 에 스프링빈 등록
package kr.co.mymelon.media;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

public class MediaCont {
	public MediaCont() {
		System.out.println("----- MediaCont() 객체 생성 됨");
	}
    
    // get 방식
    @RequestMapping(value = "/media/create.do", method = RequestMethod.GET)
	public String createForm() {
		return "media/createForm";
	}// craeteForm() end
    
    // post 방식
    @RequestMapping(value = "/media/create.do", method = RequestMethod.POST)
    public ModelAndView createForm(MediaDTO dto, HttpServletRequest req) { 
    //매개변수를 dto로 받기 위해서 필요 조건 : 동일한 name이 DTO에 있는가,  그것의 getter와 setter가 있는가
    ModelAndView mav = new ModelAndView();
    mav.setViewName("media/msgView");
    
    return mav;
    }//createForm() end
}// class end    
Comments