본문 바로가기
프로그래밍/spring

파일 업로드

by 카라미 2015. 11. 16.

pom.xml  에 추가해야 할 부분..  


<!-- file upload 를 위해 추가로 필요함. spring mvc 가 내부적으로 사용. -->

    <dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-io</artifactId>

<version>1.3.2</version>

</dependency>

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>1.2</version>

</dependency>



서블릿 설정파일에 추가할 부분...  board-servlet.xml 



<bean id="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver"

p:maxUploadSize="104857600" p:maxInMemorySize="10485760" />

 



파일을 저장하기 위한 DB 테이블 생성.. 


create table board_file(

       file_id number primary key,

board_id number not null, 

contentType varchar2(30) not null,

fileSize number not null,

fileName varchar2(50) not null,

saveFileName varchar2(50) not null,

constraint fk_board_id foreign key(board_id)

references board(board_id)

ON DELETE CASCADE

);






파일을 저장하기 위해서는 Multipart/form-data를 이용해야 하므로, form을 아래와 같이 바꾼다. 




<form method="post" action="write"  enctype="multipart/form-data">

제목 : <input type="text" name="title">

<br>

<textarea name="content" cols="60" rows="6"></textarea>

<br>


<input type="file" name="image"/> 


<input type="submit" value="글 저장">

</form>



controller 에서는 





public String write(@ModelAttribute BoardDTO boardDTO, @RequestParam("image") MultipartFile imageFile, HttpSession session) throws Exception{

UserDTO user = (UserDTO)session.getAttribute("user");

// user가 로그인하지 않았다면 exception을 발생시킨다. 글쓰기는 반드시 로그인한 사용자만 사용할 수 있기 때문이다.

if(user == null){

throw new RuntimeException("로그인 후에 이용해 주세요.");

}else{

boardDTO.setUserID(user.getUserID());

}

//  파일을 저장하는 부분.

String saveDir = "c:/temp";

File saveDirFile = new File(saveDir);

if(!saveDirFile.exists()){ // 디렉토리가 존재하지 않는다면.

saveDirFile.mkdirs(); // 디렉토리를 생성한다.

}

String saveRealPath = "";

if(imageFile.getOriginalFilename() != null && !"".equals(imageFile.getOriginalFilename())){

String saveFileName = System.nanoTime() + "_" + Thread.currentThread().getId() + "_" + imageFile.getOriginalFilename() ; // 유일한 파일이름을 만들기 위하여 

saveRealPath = saveDir + File.separator + saveFileName;

try {

imageFile.transferTo(new File(saveRealPath)); // 실제 파일을 저장한다.

} catch (Exception e) {

throw new RuntimeException("file save error : " + saveFileName + " : " + e);

}

BoardFileDTO boardFile = new BoardFileDTO();

boardFile.setContentType(imageFile.getContentType()); // 파일의 mimeType

boardFile.setFileSize(imageFile.getSize()); // 파일의 크기

boardFile.setFileName(imageFile.getOriginalFilename()); // 파일의 실제 이름

boardFile.setSaveFileName(saveFileName); // 하드디스크에 저장된 실제 파일 이름.

boardDTO.setBoardFile(boardFile);

}


System.out.println(boardDTO);

// TODO boardDTO를 데이터 베이스에 저장하는 코드를 아래에 작성한다.

boardSercvice.addBoard(boardDTO);

return "redirect:/board/list";




board의 글이 저장되고,  그 때 얻어온 Board_ID가 file테이블에 들어가야하므로....  Board를 입력하는 Mapping 파일 수정.. 



<insert id="addBoard" parameterType="Board" useGeneratedKeys="true" keyProperty="boardID">

<![CDATA[

insert into board(board_id, title, content,user_id,regdate) 

values ( board_seq.nextval, #{title}, #{content},#{userID},sysdate)

]]>

<selectKey keyProperty="boardID" resultType="Integer" order="AFTER">

SELECT board_seq.currval FROM dual

</selectKey>

</insert>


위 처럼 selectKey를 정의해주면,  board객체의 id 값을 채워준다. 




public int addBoard(BoardDTO board) throws RuntimeException {

sqlSession.insert("addBoard", board);

return board.getBoardID();

}


insert를 실행하고,  board.getBoardID() 메서드를 실행하면, board가 입력될때 생성된 BoardID값을 얻을수 있다..   그 값을 이용하여, File을 입력한다. 


public void addBoard(BoardDTO board) throws RuntimeException {

int boardID = boardDAO.addBoard(board);

board.getBoardFile().setBoardID(boardID);

boardDAO.addBoardFile(board.getBoardFile());

}

 


Board를 입력하고, 입력하면서 얻어온 BoardID를 이용해서 BoardFile을 입력한다.  




public int addBoardFile(BoardFileDTO boardFile) throws RuntimeException {

return sqlSession.insert("addBoardFile",boardFile);









'프로그래밍 > spring' 카테고리의 다른 글

spring 플러그인 설치및 sts 설치 등등  (0) 2016.06.15
파일다운로드  (0) 2015.11.17
spring_mabatis 설정  (0) 2015.11.02
filter  (0) 2015.10.29
springMVC config  (0) 2015.10.28