BLOG ARTICLE 스프링 파일 | 1 ARTICLE FOUND

  1. 2011.08.17 [Spring] 스프링 3.0 에서 파일 업로드 처리 (File Upload) (3)


가장 기본적으로 파일 업로드를 하려면 

html 문서 안에 <form> 태그에서

<form method="post" enctype="multipart/form-data">
...........
</form> 







Multipart 지원기능을 사용하려면  먼저 multipartResolver 를 스프링 설정 파일에 등록 해주어야 한다.

CommonsMultipartResolver 를 multipartResolver 로 사용하려면, 다음과 같이 

빈 이름을 반드시!!!  "multipartResolver" 로 등록해서 사용하면 된다.
다른이름으로 등록하면 안된다. 그냥 안된다. 절대안된다. 업로드를 포기하라.

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

참고로 프로퍼티들은

maxUploadSize(최대업로드 가능한 바이트크기)
maxInMemorySize(디스크에 임시 파일을 생성하기 전에 메모리에 보관할수있는 최대 바이트 크기)
defaultEncoding(요청을 파싱할 때 사용할 캐릭터 인코딩. 기본값 ISO-8859-1)





이제 컨트롤러 파일에서 업로드가 되는 파일에 접근을 해야하는데, 

빈객체를 이용해서 받는 방법(커맨드 객체), 
@RequestParam 어노테이션을 이용하는 방법,
MultipartHttpServletRequest 를 이용하는 방법,

머 편한 방법을 택하면 된다.

주의 할 점은 <input type="file" name="file" size="50">
폼에서 파일프로퍼티 이름을 "file"로 썼다면, 
업로드될 파일에 접근 프로퍼티도 항상 무조건 네버! "file" 이 되어야 한다.


빈객체를 이용하는 방법은
public class ItemBean {

	MultipartFile file;
	

	public MultipartFile getFile() {
		return file;
	}

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

	
자바빈 파일에 set,get을 등록해주면 자동으로 들어간다. 



다음은 @RequestParam 어노테이션을 이용한 방법
	

	@RequestMapping(method = RequestMethod.POST)
	public ModelAndView process(HttpSession session, ItemBean itemBean,
								@RequestParam("file")MultipartFile file) {



나머지는 귀찮아서....

일단 이렇게 하면 MultipartFile 타입으로 file 에 업로드된 파일이 들어오게된다.


여기까지 했으면 다 끝난거다. 이제 쓰기만 하면 된다.

쓰는법은 하고싶은데로 하면되는데, 

MultipartFile 의 주요 메소드는

 String getName() 파라미터 이름을 구한다. 
 String getOriginalFilename()  업로드 한 파일의 실제!! 이름을 구한다.
 boolean isEmpty()  업로드 한 파일이 존재하지 않는 경우 true를 리턴한다.
 long getSize()  업로드한 파일의 크기를 구한다.
 byte[] getBytes() throws IOException  업로드 한 파일 데이터를 구한다. --> 이걸로 파일 쓰면된다.
 InputStream getInputStream()  InputStrem을 구한다.
 void transferTo(File dest)  업로드 한 파일 데이터를 지정한 파일에 저장한다. --> 요고도 파일쓰는거다.




걍 쉽게 MultipartFile.getBytes() 를 이용해서 쓰는게 편하다.
package Spring;

import java.io.FileOutputStream;

import org.springframework.web.multipart.MultipartFile;

public class FileWriter {

	private FileOutputStream fos;
	
	public void writeFile(MultipartFile file, String path, String fileName){
		
		try{
		
			byte fileData[] = file.getBytes();
			
			fos = new FileOutputStream(path + "\\" + fileName);
			
			fos.write(fileData);
		
		}catch(Exception e){
			
			e.printStackTrace();
			
		}finally{
			
			if(fos != null){
				
				try{
					fos.close();
				}catch(Exception e){}
				
				}
		}// try end;
		
	}// wirteFile() end;
}




업로드한 파일을 특정파일로 저장하고 싶다면 MultipartFile.transferTo() 를 쓰면 편하다.

File file = new File(filePath + fileName);

multipartFile.transferTo(file); 





YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. 탐구생활 2012.10.16 12:07 신고  댓글주소  수정/삭제  댓글쓰기

    '그냥 안된다. 절대안된다. 업로드를 포기하라.'

    웃겨서 댓글답니다. ㅋㅋㅋ

  2. 휴렛 2014.11.20 10:56 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 덕분에 놓친부분 찾고 갑니다^^

  3. 방문객 2015.01.07 15:25 신고  댓글주소  수정/삭제  댓글쓰기


    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
    설정덕분에 해결하고 지나갑니다 ^^