- 파일업로드
- 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());
}
}
0 개의 댓글:
댓글 쓰기