파일전송
- 파일 전송을 위해서는 form을 post 형식으로 해야하고 enctype을 multipart/form-data로 설정해야 한다.
<form action="file_upload" method="post" enctype="multipart/form-data"> <input type="file" name="myfile"> <input type="submit" value="OK"> </form>
- 이때 Controller에서는 해당 파라미터를 MultipartFile로 받아와야한다.
- enctype="multipart/form-data" 요청을 메소드 파라미터와 연관시킬 수 있다.
- 이때, 넘어오는 파라미터의 명과 메소드의 파라미터의 명이 같아야한다.
public String doRegist(@ModelAttribute Book book, @RequestPart(required = false) MultipartFile file)
- 그리고 업로드된 파일을 저장하기 위해 rsLoader와 Resource를 사용하여 실제로 저장할 폴더의 경로를 구해와 파일을 전송받아 저장한다.
import java.io.IOException; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; @Autowired ResourceLoader rsLoader; @RequestMapping("/file_upload") public String fileUpload(MultipartFile myfile) throws IllegalStateException, IOException { // System.out.println(myfile.getSize()); Resource resource = rsLoader.getResource("resources/upload"); myfile.transferTo( new File(resource.getFile().getCanonicalPath() + "/" + myfile.getOriginalFilename())); return ""; }
- enctype="multipart/form-data" 요청을 메소드 파라미터와 연관시킬 수 있다.
- 또한 servlet-context.xml에 CommonsMultipartResolver를 빈으로 생성해야 한다.
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> </beans:bean>
- pom.xml에 commons-fileupload dependency를 추가해야한다.
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency>
- 보통 dispatcher servlet이 검사하지않게 설정한 resoureces 폴더 밑에 upload 폴더를 만들고 저장한다.
- http://주소/fileex/resources/upload/test.txt 와 같이 'resources/upload/업로드한파일명' 을 검색하면 파일을 다운받거나 볼 수 있다.