파일 단일업로드, 파일 다중업로드, 파일 중복체크를 개발한 것에 대한 내용을 정리한다 :)
우선 화면에서 form 태그를 생성하는데, 여기서 중요한건 2가지가 있다.
<form name="detailForm" method="post" enctype="multipart/form-data">
<input type="file" multiple="multiple" name="file" class="ct_input_g">
...
</form>
1. form 태그의 { enctype="multipart/form-data" } -> 파일 업로드 기능을 사용할 수 있게 한다.
2. input 태그의 { type="file", multiple="multiple" } -> 파일 다중업로드가 가능하도록 한다.
이렇게 파일을 올렸다면, Controller 에서 인자로 HttpServletRequest 말고 MultipartHttpServletRequest 를 받아야 한다.
MultipartHttpServletRequest :
HttpServletRequest 를 상속받았기 때문에, HttpServletRequest 기능 그대로 쓸 수 있으며 확장된 기능(파일)이 많아서 편하다.
또, ~Request 를 활용하면 파일 저장경로는 하드코딩하지 않아도 된다 ㅎㅎ.
@RequestMapping(value="addProduct", method=RequestMethod.POST)
public String addProduct( @ModelAttribute("product") Product product, MultipartHttpServletRequest request,
@RequestParam("file") MultipartFile[] file ) throws Exception {
//String uploadPath = request.getSession().getServletContext().getRealPath("/");
String uploadPath = request.getRealPath("/images/uploadFiles");
String fileOriginName = "";
String fileMultiName = "";
for(int i=0; i<file.length; i++) {
fileOriginName = file[i].getOriginalFilename();
System.out.println("기존 파일명 : "+fileOriginName);
SimpleDateFormat formatter = new SimpleDateFormat("YYYYMMDD_HHMMSS_"+i);
Calendar now = Calendar.getInstance();
//확장자명
String extension = fileOriginName.split("\\.")[1];
//fileOriginName에 날짜+.+확장자명으로 저장시킴.
fileOriginName = formatter.format(now.getTime())+"."+extension;
System.out.println("변경된 파일명 : "+fileOriginName);
File f = new File(uploadPath+"\\"+fileOriginName);
file[i].transferTo(f);
if(i==0) { fileMultiName += fileOriginName; }
else{ fileMultiName += ","+fileOriginName; }
}
System.out.println("*"+fileMultiName);
product.setFileName(fileMultiName);
productService.addProduct(product);
return "forward:/product/getProduct.jsp";
}
반응형
'Backend > Spring Framework' 카테고리의 다른 글
@Value vs @ConfigurationProperties 비교 (0) | 2019.07.01 |
---|---|
redirect 로 페이지 이동시 값 전달방법 (0) | 2018.07.25 |
컨트롤러에서 쿠키저장이 잘 안될 때 해결하는 방법 (0) | 2018.05.09 |
@RequestParam 과 @ModelAttribute (0) | 2018.05.04 |
Spring MVC 핵심 Component (0) | 2018.05.03 |
댓글