Spring

[Spring] JSON 이용한 FileUpload

별토끼. 2017. 7. 28. 16:51
반응형
[Spring] JSON 이용한 FileUpload

  •  FileUpload

1.
mybatis , mybatisSpring, springJDBC, 파일업로드처리하는 commons
lib폴더에 넣는 것이 아닌 pom.xml에 넣어서 자동 다운로드되도록 한다.
- 다운로드가 되면 Maven Dependencies에 담긴다.


2.

servlet-context 설정 추가

1
2
3
4
5
6
7
8
9
    <!-- Multipart 폼 전송을 처리하기 위한 bean -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10240000"/>
    </bean>
    
    <!--  -->
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="0"/>
    </bean>
cs


3.

dao, dto, controller, service, view 패키지 생성


4.

fileDto생성



5.

fileDao 인터페이스 생성 및 fileDaoImpl생성

-FileDaoImpl


6.

Configuration - typeAlias설정하고 Mapper 설정하기


7.

FileService Interface, FileService Impl 생성


8.

component-scan 할 수 있도록 servlet-context에 등록


9.

fileController

1
2
3
4
5
    @RequestMapping("/file/insertform")
    public String insertform(){
        return "file/insertform";
    }
 
cs


10.



11.

cf> new file 생성시 메뉴에 jsp파일 보이도록 하기



12.

insertform.jsp


13.

MultipartType pom.xml에 commonsIO/servletcontext.xml 에 bean이 있어야 동작이 이루어진다.


14.

fileController

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    @RequestMapping("/file/insertform")
    public String insertform(){
        return "file/insertform";
    }
    
    @RequestMapping("/file/insert")
    public String insert(HttpServletRequest request, @ModelAttribute FileDto dto){
        //FileService 객체를 통해서 업로드 처리를 한다.
        fileService.insert(request, dto);
        
        //파일 목록 보기로 리다일렉트 이동 시킨다.
        return "redirect:/file/list.do";
    }
 
 
 
 
cs


15.

fileServiceImpl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    @Override
    public void insert(HttpServletRequest request, FileDto dto) {
        //파일을 저장할 폴더의 절대 경로를 얻어온다.
        String realPath=request.getSession()
                .getServletContext().getRealPath("/upload");
        System.out.println(realPath);
        
        //MultipartFile 객체의 참조값 얻어오기
        //FileDto 에 담긴 MultipartFile 객체의 참조값을 얻어온다.
        MultipartFile mFile=dto.getFile();
        //원본 파일명
        String orgFileName=mFile.getOriginalFilename();
        //파일 사이즈
        long fileSize=mFile.getSize();
        //저장할 파일의 상세 경로
        String filePath=realPath+File.separator;
        //디렉토리를 만들 파일 객체 생성
        File file=new File(filePath);
        if(!file.exists()){//디렉토리가 존재하지 않는다면
            file.mkdir();//디렉토리를 만든다.
        }
        //파일 시스템에 저장할 파일명을 만든다. (겹치치 않게)
        String saveFileName=System.currentTimeMillis()+orgFileName;
        try{
            //upload 폴더에 파일을 저장한다.
            mFile.transferTo(new File(filePath+saveFileName));
        }catch(Exception e){
            e.printStackTrace();
        }
        //FileDto 객체에 추가 정보를 담는다.
        dto.setOrgFileName(orgFileName);
        dto.setSaveFileName(saveFileName);
        dto.setFileSize(fileSize);
        //FileDao 객체를 이용해서 DB 에 저장하기
        fileDao.insert(dto);        
    }
cs


16.

dao

1
2
3
4
5
6
    
    @Override
    public void insert(FileDto dto) {
        session.insert("file.insert", dto);
    }
 
cs


17. 

mapper

1
2
3
4
5
6
    <insert id="insert" parameterType="fileDto">
        INSERT INTO board_data
        (num, writer, title, orgFileName, saveFileName, fileSize, regdate)
        VALUES(board_data_seq.NEXTVAL, #{writer}, #{title},
        #{orgFileName}, #{saveFileName}, #{fileSize}, SYSDATE)
    </insert>
cs



같은 방식으로 list, delete구현

반응형