JAVA Basic 강의자료] 멀티 파일 업로드

 

JAVA Basic 강의자료] 멀티 파일 업로드

 

 

 

 

실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.

 

 

멀티 파일 업로드

 

 

<소스코드>

 

JavaBeans에 List형식으로 가지고 있음.
public class FileuploadCommand implements Serializable {
MultipartFile 프러퍼티를 가지고 있는 JavaBean 리스트
    private static final long serialVersionUID = 1L;    
    private List<FileuploadItem> fileuploadItems;
   
    public FileuploadCommand() {
 fileuploadItems = new ArrayList<FileuploadItem>();
}
   
    public List<FileuploadItem> getFileuploadItems() {
        return fileuploadItems;
    }
   
    public void setFileuploadItems(List<FileuploadItem> fileuploadItems) {
        this.fileuploadItems = fileuploadItems;
    }
} 

 

===================

 

FileUploadItem
public class FileuploadItem implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    //MultipartFile 정의
        private MultipartFile file;
   
    public FileuploadItem() {
    }
   
    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
   
    // 생략(setter、getter)
}

 

================

 

JSP 작성
<h4>멀티 파일 업로드</h4>
<form:form modelAttribute="fileuploadCommand" action="${appUrl}/test/fileupload/multi.html" method="post" enctype="multipart/form-data">
   
    <c:forEach items="${fileuploadCommand.fileuploadItems}" var="item" varStatus="itemStatus">
    <p>
        <form:input path="fileuploadItems[${itemStatus.index}].name" />
        <form:errors path="fileuploadItems[${itemStatus.index}].name" cssClass="errors" />
       
        <form:input path="fileuploadItems[${itemStatus.index}].file" type="file" />
        <form:errors path="fileuploadItems[${itemStatus.index}].file" cssClass="errors" />
    </p>
    </c:forEach>
   
    <input type="submit"/>
</form:form> 

 

==================

 

Controller 작성
@Controller
@RequestMapping("/test/fileupload")
public class FileuploadController {
   
// command 의 초기객체 취득    
@ModelAttribute("fileuploadCommand")
    public FileuploadCommand createInitCommand() {
        FileuploadCommand command = new FileuploadCommand();
        return command;
    }
   
    //  초기값 설정
    @RequestMapping(method=RequestMethod.GET)
    public void setupForm(Model model) {
       
        FileuploadCommand command = createInitCommand();
        // 최대 3개까지 업로드        
        for(int i=0; i < 3; i++) {
            command.getFileuploadItems().add(new FileuploadItem());
        }
        model.addAttribute("fileuploadCommand", command);
       
    } 

 

===========================

 

Controller 작성(계속)
// 멀티 파일 업로드
    @RequestMapping(value="multi", method=RequestMethod.POST)
    public ModelAndView doAction2(@ModelAttribute("fileuploadCommand") FileuploadCommand command,
            BindingResult bindingResult) throws IllegalStateException, IOException {
       
        // 바인드에러 발생시 처리
        if(bindingResult.hasErrors()) {
            ModelAndView mav = new ModelAndView();
              mav.getModel().putAll(bindingResult.getModel());            
              return mav;
        }
       
        for(FileuploadItem item : command.getFileuploadItems()) {
           
            MultipartFile file = item.getFile();
            if(file.isEmpty()) {
                continue;
            }
           
            File uploadFile = new File("d:/upload/", file.getOriginalFilename());
            file.transferTo(uploadFile);
        }
       
        ModelAndView mav = new ModelAndView("/test/complete");
        return mav;
       
    }
   
}

===============​ 

 

* 브라우저 표시(todo)/파일 사이즈 초과시 처리방법(todo)
 

 

 

 

+ Recent posts