티스토리 뷰

728x90
[xxxx-servlet.xml]

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />


정확하게 위와 같이 지정해 준다


[write.jsp]

<form method="post" action="/Spring_BBS/write.chobo" enctype="multipart/form-data">
<table border="1" width="300">
<tr>
<td>제목</td>
<td><input type="text" name="title"></td>
</tr>
<tr>
<td width="100">파일첨부</td>
<td><input type="file" name="file"></td>
</tr>
<tr>
<td colspan="2" align="center" height="30">
<input type="submit" value="글쓰기" />
                                <input type="hidden" value="${pageNumber}" name="pageNumber" /> 
</td>
</tr>
</table>
</form>


JSP 코딩을 할때 당연한 소리지만 항상 이름들은 꼭 대소문자를 구분해서 맞춰줘야 한다
뷰 페이지에서 id, file 이라고 지정했으면 Bean 클래스 또는 스프링에서 얘기하는 Command 클래스에서도 id, file 이라고 해줘야만 값을 제대로 받아온다
일단 file이라고 지정했다


[UploadCommand.java]

package Spring_BBS;

import org.springframework.web.multipart.MultipartFile;

public class UploadCommand {
String id;
MultipartFile file;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}

public MultipartFile getFile() {
return file;
}
public void setFile(MultipartFile file) {
this.file = file;
}


역시 마찬가지로 settter / getter 이름을 잘 맞춰줘서 만든다


[WriteImpl.java]

@RequestMapping(method=RequestMethod.POST)
public ModelAndView submit(UploadCommand upload, HttpServletRequest request) {

                /* 업로드 된 파일의 이름이 없거나, 용량이 0인 등 제대로 업로드가 되었는지
                    확인하는 부분은 따로 만들어 주면 된다
                    ex)
                    String fileName = upload.getFile().getOriginalFilename();
                    long fileSize = upload.getFile().getSize();

                    if(fileName == null || fileName.equals("") || fileSize <= 0)  {
                        return null;
                    }

ModelAndView mav = new ModelAndView();
mav.setViewName("redirect:/list.chobo?pageNumber=" + request.getParameter("pageNumber"));

HttpSession session = request.getSession();
upload.setId((String)session.getAttribute("id"));
mvcpDao.setArticle(upload);
File file = new File("D:/Java/WorkSpace/Spring_BBS/WebContent/UpLoad/" + upload.getFile().getOriginalFilename());
try {
upload.getFile().transferTo(file);
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
return mav;
}

 
WriteImpl의 submit 메소드가 실행되면서 UploadCommand와 HttpServletRequest를 받아온다
위에서 얘기했듯이 name 들만 잘 맞추면 자동으로 값을 입력해준다
받아온 file을 새로 만든 file로 넣어준다

FileInputStream 등을 사용하지 않아도 transferTo() 를 사용하면 아주 쉽게 파일을 저장할 수 있다

아주 간단하다 ㅎ

MultiparFile 인터페이스에서 많이 쓰이는 메소드들
 메  소  드 내    용 
 String getName()  파라미터 이름 
 String getOriginalFilename()  파일 이름 
 boolean isEmpty()  파일이 존재하지 않으면 true 반환 
 long getSize()  파일 크기 
 byte[] getBytes() throws IOException  파일 데이터 
 InputStream getInputStream() throws IOException   파일 데이터를 읽어오는 InputStream을 얻어온다
 사용이 끝난 후에는 알아서 잘 종료 해줄 것
 void transferTo(File file) throws IOException  파일 데이터를 지정한 file로 저장


'프로그래밍 > Spring' 카테고리의 다른 글

[Spring] 파일 다운로드  (2) 2011.08.17
[Spring] DI(Dependency Injection) 패턴  (0) 2011.07.28
[Spring] 기본 설정  (1) 2011.07.27