프로그래밍/Spring
[Spring] 파일 업로드
꼬렙
2011. 8. 17. 16:58
728x90
[xxxx-servlet.xml]
정확하게 위와 같이 지정해 준다
[write.jsp]
JSP 코딩을 할때 당연한 소리지만 항상 이름들은 꼭 대소문자를 구분해서 맞춰줘야 한다
뷰 페이지에서 id, file 이라고 지정했으면 Bean 클래스 또는 스프링에서 얘기하는 Command 클래스에서도 id, file 이라고 해줘야만 값을 제대로 받아온다
일단 file이라고 지정했다
[UploadCommand.java]
public MultipartFile getFile() {
역시 마찬가지로 settter / getter 이름을 잘 맞춰줘서 만든다
[WriteImpl.java]
/* 업로드 된 파일의 이름이 없거나, 용량이 0인 등 제대로 업로드가 되었는지
확인하는 부분은 따로 만들어 주면 된다
ex)
String fileName = upload.getFile().getOriginalFilename();
long fileSize = upload.getFile().getSize();
if(fileName == null || fileName.equals("") || fileSize <= 0) {
return null;
}
WriteImpl의 submit 메소드가 실행되면서 UploadCommand와 HttpServletRequest를 받아온다
위에서 얘기했듯이 name 들만 잘 맞추면 자동으로 값을 입력해준다
받아온 file을 새로 만든 file로 넣어준다
FileInputStream 등을 사용하지 않아도 transferTo() 를 사용하면 아주 쉽게 파일을 저장할 수 있다
아주 간단하다 ㅎ
MultiparFile 인터페이스에서 많이 쓰이는 메소드들
<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" />
<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로 저장 |