2018년 4월 17일 화요일

패스트 캠퍼스 JAVA 웹 프로그래밍 마스터 17일차(파일업로드, Interceptor)

  • 파일업로드
    • try -with -resource 구문은 close 함수를 자동으로 호출해준다.
    • 고려사항
      • 중복된 파일을 올리면 안된다.
      • 하나의 폴더에 너무 많은 파일이 저장되면 관리하기 어렵다. 년/월/일 폴더를 만들고 uuid 파일이름으로 생성한다.
      • 윈도우는 디렉토리 구분자가 '\' 이고 unix계열은 디렉토리 구분자가 '/' 이다. File.separtor을 통해 이용하여 디렉토리를 구분해야한다.
      • 파일은 한번에 업로드처리 하는것이 아니다. Stream을 통해 올려야 한다. file.getbyets()는 사용금지
    • 초창기에는 http, mail도 txt로 주고받았다.
    • 외부에서는 직접 접근하면 안된다. ex) jsp를 업로드
    • Multipart 를 이용한다.
    • 서블릿
      • HttpServletRequest는 파일업로드를 지원하지 않는다.
      • 사용자가 파싱을 해야한다.
      • 별로의 라이브러리를 사용해야한다.
    • HTML Multipart
      • <form action="/upload" method="post" enctype="multipart/form-data"> 설정을 추가해야한다.
    • 라이브러리
      • commons-io , commons-fileupload 라이브러리를 통해 업로드 할수 있다.(다른 라이브러리도 가능)
    • Spring
      • multipartresolver Bean을 등록 해야한다.
      • @requestparam, multipartfile 을 통해 파일정보를 얻을수 있다.
        ex ) @requestparam("file) multipartfile file
    • Download
      • 읽어들인 파일정보를 브라우저에게 출력한다.
      • 파일정보를 reponse를 이용하여 직접 출력하겠다.
      • header에 Content-Disposition, Content-Transfer-Encoding 속성이 있으면 파일이 다운로드된다. 2개의 속성이 없으면 브라우저에서 파일 및 이미지를 보여준다.
      • @ResponseBody를 붙여주고 HttpServletResponse response를 파라미터로 주입받는다.
  • Interceptor
    • 브라우저와 DispatcherServlet와 사이에 처리할 것이 있다면 서블릿 필터를 통해 처리할 수 있다.
    • DispatcherServlet와 Controller 사이에서 처리할것  있다면 handlerinterceptor통해 할 수있다.
    • WebMvcConfigurerAdapter를 구현한 곳에 addInterceptors를 오버라이딩 하고 인터셉터 처리를 한 객체를 넣는다.
    
    @EnableWebMvc
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Bean
        LocaleInterceptor localInterceptor() {
             return new LocalInterceptor();
        }
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(localeInterceptor());
        }
    
    }
Share:

0 개의 댓글:

댓글 쓰기