본문 바로가기

spring

파일업로드

<beans:bean id="uploadPath" class="java.lang.String">
		<beans:constructor-arg value="c:/zzz/upload"></beans:constructor-arg>
	</beans:bean>

설정 

pom.xml에서추가하기

<!-- 파일업로드 라이브러리 -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>
		

import되었나 Maven Dependencies에서 확인

servlet-context.xml에서 추가하기

<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
			<beans:property name="maxUploadSize" value="10485760"></beans:property>
	</beans:bean>
	
	<beans:bean id="uploadPath" class="java.lang.String">
		<beans:constructor-arg value="c:/zzz/upload"></beans:constructor-arg>
	</beans:bean>

jsp에서

enctype을 준다

input type을 file으로 한다.

<form name="frm" action="upload" method="post" enctype="multipart/form-data">
		<input type="file" name="file">
		<input type="submit" value="저장">
	</form>

controller에서 이 부분은 servlet-centext에 

@Resource(name="uploadPath") //servlet-context에 정의한 uploadPath를 path에 저장하겠다
	private String path;

이부분 id를 뜻한다.

<beans:bean id="uploadPath" class="java.lang.String">
		<beans:constructor-arg value="c:/zzz/upload"></beans:constructor-arg>
	</beans:bean>

controller는 uploadFile 함수를 정의

private String uploadFile(String originalName, byte[] fileData) 
										throws Exception{
		//이름을 유니크하게 만드는 함수
		UUID uid=UUID.randomUUID();
        
		String savedName=uid.toString()+"-"+ originalName;
        //랜덤이름 진짜긴이름+'-진짜파일이름'
        
		File target=new File(path,savedName);
        //받는 경로,랜덤이름-진짜파일이름
        
		FileCopyUtils.copy(fileData, target);
        //fileData를 target에 저장
        
		return savedName;

실제로는 이렇게 사용 uploadFile을 함수로 안만들고 바로 사용해도된다.

자주 쓰일경우 함수로 만든다.

	@RequestMapping(value="upload",method=RequestMethod.POST)
	public void uploadPost(MultipartFile file) throws Exception{
							//MultipartFile에는 사진에 대한 정보가 담겨있음
		System.out.println("upload post..............................");
        //여기로 오는지 확인한다.
		System.out.println("file name:" + file.getOriginalFilename());
        //파일이름을 콘솔에 출력
		System.out.println("file size:" + file.getSize());
        //파일사이즈
		System.out.println("file type:" + file.getContentType());
        //파일 타입
		System.out.println("path:"+ path);
        //패쓰를 찍는다
		
		String savedName=uploadFile(file.getOriginalFilename(),file.getBytes());
		System.out.println("savedFile:"+savedName);
	}