1. 간단한 설명
멀티 파트 형식의 데이터는 양식을 여러 부분으로 나눕니다. 각 부분은 입력 필드에 해당합니다. 일반적인 양식 입력 필드에서 텍스트 유형 데이터는 해당 부분에 배치되지만 파일이 업로드되면 해당 부분이 바이너리가 될 수 있습니다. 이것과 유사 :
2. Multipart 파서를 구성하십시오
멀티 파트 요청은 복잡해 보일 수 있지만 스프링 MVC에서는 쉽게 처리 할 수 있습니다. 파일 업로드를 처리하기 위해 컨트롤러 메소드를 작성하기 전에 Dispatcherservlet에 멀티 파트 요청을 읽는 방법을 알려주기 위해 Multipart 파서를 구성해야합니다.
Spring에는 2 개의 내장형 구현이 있습니다.
Standardservletmultipartresolver의 구성 :
1. 성명서 :
ApplicationContext.xml의 구성
코드 사본은 다음과 같습니다. <bean id = "multipartresolver"브러시 : java; "> @bean (name ="multipartresolver ") public Standardardservletervletmultipartresolver getStandardServletMultipartresolver () {return new sportaardServletMultipartresolver ();};
팁 : Multipart 파서의 이름은 멀티 패트 레졸버 여야합니다. 그렇지 않으면 오류 가보고됩니다.
2. 업로드 매개 변수 구성 :
* web.xml 구성
<Servlet> <Servlet-name> DispatcherServlet </servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherServlet </servlet-class> <init-param> <param-name> contextConfiglocation </param-name> <param-value : classContext.xml </param-valt.xml> x <load-on-startup> 1 </load-on-startup> <tultipart-config> <!-/tmp/upload 디렉토리에 업로드-> <위치>/tmp/upload> <!-파일 크기는 2m-> <max-file-size> 2097152 </max-file-size> <!-전체 요청이 4M을 초과하지 않습니다. <max-request-size> 4194304 </max-request-size> <!-모든 파일은 디스크에 기록되어야합니다-> <파일-크기-임시 홀드> 0 </file-size-threshold> </multipart-config> </servlet> <servlet-mapping> <servlet-name> dispatcherservlet </servlet-name> <url-pattern> </servlet-mapping>
* 구성 클래스의 구성
AbstractAntationConfigDispatcherServletinitializer의 구성 클래스에 상속됩니다
@override protected void customizeregration (servletregistration.dynamic 등록) {// // // tmp /upload 디렉토리에 업로드, 파일 크기는 2m이고 전체 요청이 4m를 초과하지 않으며 모든 파일이 디스크 등록에 기록되어야합니다. MultipartConfigelement ( "e : // upload_ftp", 2097152,4194304,0)); }Commonsmultipartresolver 구성 :
1. Bean을 선언하고 업로드 매개 변수를 구성하십시오
<bean id = "multipartresolver"> <!-업로드 디렉토리/tmp/업로드를 설정합니다. 최대 파일 용량은 2m으로 설정됩니다. 최대 메모리 크기는 0으로 설정되므로 모든 파일이 디스크로 기록됩니다. 멀티 파트 요청의 전체 최대 용량을 설정할 수 없습니다-> <속성 이름 = "uploadtempdir"value = "/tmp/upload"/> <속성 이름 = "maxuploadsize"value = "2097152"/> <속성 이름 = "maxinmemorysize"value = "0"/> </bean>
차이 :
1. Commonsmultipartresolver 표준 ervletmultipartresolver와 비교하여 Multipart 요청의 전체 최대 용량을 설정하는 것은 불가능합니다.
2. Commonsmultipartresolver는 임시 파일 경로를 강제로 설정하지 않습니다. 기본적 으로이 경로는 서블릿 컨테이너의 임시 디렉토리입니다. Standardservletmultipartresolver는 임시 파일 경로를 정상적으로 실행하도록 설정해야합니다. (위에서 언급 한 업로드 된 디렉토리는 모두 임시 파일 경로입니다)
3. SpringMVC는 요청을 처리합니다
1. 프론트 엔드 양식
<form action = "/picture"method = "post"enctype = "multipart/form-data"> <input type = "file"name = "picture"> <입력 유형 = "제출"> </form>
팁 : ENCTYPE = "multipart/form-data"는 SpringMVC에 이것이 멀티 파트 요청이라고 알려주기 위해 설정해야합니다.
2. 백엔드 MVC는 요청을 수락합니다
@requestmapping (value = "/picture", method = requestmethod.post) public string gethome (@requestpart ( "picture") multipartfile 사진) IoException {String name = piction.getName (); 바이트 [] bytes = picture.getBytes (); picture.transferto (새 파일 ( "/"+picture.getoriginalfilename ())); // 여기에서 파일 시스템에 저장할 때 상대 경로를 사용하십시오. 예를 들어 여기의 구성은 /입니다. 구성된 업로드 디렉토리를 기반으로합니다. 즉, 파일 경로 e :/ upload_ftp/는 저장된 디렉토리 리턴 "home"입니다. }팁 : 1. @requestPart ( "Picture") : 등록 양식이 제출되면 P eSsence 속성은 요청에 해당 부품 데이터를 포함하는 바이트 배열을 제공합니다 (@RequestPart를 통해 지정 됨). 사용자가 파일을 선택하지 않고 양식을 제출하면 배열이 널보다는 비어 있습니다. 따라서 바이트 [] 배열을 사용하여 멀티 파트 파일 대신 멀티 파트 요청을 수신 할 수도 있습니다.
2. multipartfile : 수신하기 위해 멀티 파트 파일 방법을 사용하여 다음 작업을 수행하는 많은 방법을 제공합니다 ...
3. 부품 형식으로 업로드 된 파일을 허용합니다.
주제에 관해서는, 부품 인터페이스와 멀티 파트 파일 사이에는 큰 차이가 없습니다. 대부분의 경우, 부품 메소드의 이름은 MultipartFile 메소드의 이름과 정확히 동일합니다. GetOriginalFilename ()에 해당하는 getSubmittedFilename ()과 같은 유사점이 있지만 약간 다릅니다. 마찬가지로 write ()는 TransferTo ()에 해당 하며이 메소드의 도움으로 업로드 된 파일을 파일 시스템에 쓸 수 있습니다.
컨트롤러 메소드를 작성할 때 부품 매개 변수를 통해 파일 업로드를 허용하는 경우 멀티 패스트레 솔버를 설정할 필요가 없습니다. MultipartFile을 사용할 때만 Multipartresolver가 필요합니다.
@requestmapping (value = "/picture", method = requestmethod.post) public string gethome (@requestpart ( "picture") Part Picture)는 ioexception {picture.write ( "/"+picture.getSubmittedFilename ()); "집"을 반환합니다. }위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.