SpringMVC 단일 파일 업로드 와 다 중 파일 업로드 인 스 턴 스

약술 하 다
자바 웹 프로젝트 에서 파일 업로드 기능 은 거의 없어 서 는 안 됩 니 다.저 는 프로젝트 개발 에서 도 자주 만 날 수 있 습 니 다.예전 에는 별로 신경 쓰 지 않 았 습 니 다.오늘 은 시간 이 나 면 이 분야 의 지식 을 배 웠 습 니 다.그래서 본인 이 배 운 SpringMVC 에서 단일 파일 과 다 중 파일 을 업로드 하 는 지식 을 필기 하 게 되 었 습 니 다.
파일 업로드
1.페이지
간단 한 폼 제출 을 예 로 들 어 파일 업로드 에 서 는 폼 의 제출 방법 을 post 로 설정 하고 enctype 의 값 을'multipart/form-data'로 설정 해 야 합 니 다.

<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">
  <input type="file" name="img"><br /> 
  <input type="submit" name="  ">
</form>
2.컨트롤 러
Controller 의 처리 방법 에 서 는 MultipartFile 대상 을 매개 변수 로 전단 에 올 라 온 파일 을 받 습 니 다.구체 적 인 설명 은 코드 설명 을 보십시오.

@Controller
@RequestMapping("/test")
public class MyController {

  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
  //    MultipartFile          file   input   name  ,        MultipartFile            ,       @RequestParam("img")          
  public String upload(MultipartFile img, HttpSession session)
      throws Exception {
    //         ,MultipartFile    null,      getSize()                   
    if (img.getSize() > 0) {
      //               , :/home/tomcat/webapp/   /images
      String path = session.getServletContext().getRealPath("images");
      //          , :  .png
      String fileName = img.getOriginalFilename();
      //          ,            , :    jpg png     
      if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
        File file = new File(path, fileName);
        img.transferTo(file);
        return "/success.jsp";
      }
    }
    return "/error.jsp";
  }
}

3.springmvc.xml 설정
MultipartFile 대상 을 사용 하여 전단 에 올 라 온 파일 을 받 으 려 면 springmvc 설정 파일 에서 다음 과 같은 설정 을 해 야 합 니 다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

  ...

  <!--   :CommonsMultipartResolver id      ,   multipartResolver,     -->
  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--                         -->
    <property name="defaultEncoding" value="utf-8"/>
    <!--      ,                ,               1M(1*1024*1024) -->
    <property name="maxUploadSize" value="1048576"/>
    <!--  maxUploadSize   ,  maxUploadSizePerFile            , maxUploadSize            -->
    <property name="maxUploadSizePerFile" value="1048576"/>
  </bean>

  <!--             ,               -->
  <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="defaultErrorView" value="/error.jsp"/>
  </bean>
</beans>

위 설정 파일 에 있 는 Commons Multipart Resolver 의 속성 값 설정 은 필요 하지 않 습 니 다.모두 쓰 지 않 아 도 됩 니 다.여기까지 만 하면 하나의 파일 업로드 가 가능 합 니 다.다음은 다 중 파일 업 로드 를 살 펴 보 겠 습 니 다.
3.다 중 파일 업로드
사실 다 중 파일 업로드 도 간단 하 다.단일 파일 업 로드 는 Controller 의 처리 방법 에서 MultipartFile 대상 을 매개 변수 로 전단 에 올 라 온 파일 을 받 고 다 중 파일 업 로드 는 MultipartFile 대상 배열 로 받는다.
1.페이지
이 페이지 에는 name 값 과 같은 file 형식의 input 태그 가 몇 개 있 으 며,다른 파일 이 올 린 페이지 와 다 르 지 않 습 니 다.

<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">
  file 1 : <input type="file" name="imgs"><br /> 
  file 2 : <input type="file" name="imgs"><br /> 
  file 3 : <input type="file" name="imgs"><br /> 
  <input type="submit" name="  ">
</form>
2.컨트롤 러
컨트롤 러 의 처리 방법 은 MultipartFile[]배열 을 수신 매개 변수 로 사용 하고 직접 사용 할 수 없습니다.파 라 메 터 를 교정 해 야 합 니 다.구체 적 인 설명 은 코드 설명 을 보십시오.

@Controller
@RequestMapping("/test")
public class MyController {

  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
  //    MultipartFile[] imgs               ,imgs       file   input   name,               MultipartFile  ,
  //              MultipartFile[]  ,      [Lorg.springframework.web.multipart.MultipartFile;.<init>()  ,
  //      @RequestParam    (    MultipartFile     ),        :@RequestParam("imgs") MultipartFile[] files。
  public String upload(@RequestParam MultipartFile[] imgs, HttpSession session)
      throws Exception {
    for (MultipartFile img : imgs) {
      if (img.getSize() > 0) {
        String path = session.getServletContext().getRealPath("images");
        String fileName = img.getOriginalFilename();
        if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
          File file = new File(path, fileName);
          img.transferTo(file);
        }
      }
    }
    return "/success.jsp";
  }
}
마찬가지 로 MultipartFile 배열 을 사용 하여 전단 에 올 라 온 여러 파일 을 받 고 springmvc 의 프로필 을 설정 해 야 합 니 다.구체 적 인 설정 은 상기 단일 파일 에 올 라 온 springmvc.xml 설정 과 다 르 지 않 으 므 로 직접 복사 하면 됩 니 다.이렇게 하면 여러 파일 을 업로드 할 수 있다.
4.여러 파일 업로드 상황 종합
물론 프로젝트 개발 에서 장면 이 이렇게 간단 하지 않 을 수도 있 습 니 다.상기 다 중 파일 업 로드 는 하나의 파일 을 선택 한 후에 같이 업로드 하 는 것 입 니 다.(즉,여러 개의 name 같은 input 태그)제 프로젝트 에서 하나의 input 태그 만 있 으 면 한 번 에 여러 개의 파일 을 올 릴 수 있 습 니까?또는 한 페이지 에 하나씩 선택 한 다 중 파일 을 업로드 해 야 할 뿐만 아니 라 한꺼번에 선택 한 다 중 파일 을 업로드 해 야 할 뿐만 아니 라 단일 파일 도 업로드 해 야 할 까요?괜 찮 습 니 다.Multipart File[]통식,코드 도 쉬 워 요.다음은 바로 코드 를 올 립 니 다.
1.페이지
여기 있 는'한 번 에 여러 파일 을 선택 한 다 중 파일 업로드'는 input 탭 에 multiple 속성 을 추가 한 것 일 뿐 입 니 다.

<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">

                 : <br /> 
  <input type="file" name="imgs1" multiple><br /> <br /> 

                 : <br /> 
  <input type="file" name="imgs2"><br /> 
  <input type="file" name="imgs2"><br /><br /> 

        : <br /> 
  <input type="file" name="imgs3"><br /><br /> 
  <input type="submit" name="  ">
</form>

2.컨트롤 러

@Controller
@RequestMapping("/test")
public class MyController {

  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
  public String upload(@RequestParam MultipartFile[] imgs1,@RequestParam MultipartFile[] imgs2,@RequestParam MultipartFile[] imgs3, HttpSession session)
      throws Exception {
    String path = session.getServletContext().getRealPath("images");
    for (MultipartFile img : imgs1) {
      uploadFile(path, img);
    }
    for (MultipartFile img : imgs2) {
      uploadFile(path, img);
    }
    for (MultipartFile img : imgs3) {
      uploadFile(path, img);
    }
    return "/success.jsp";
  }

  private void uploadFile(String path, MultipartFile img) throws IOException {
    if (img.getSize() > 0) {
      String fileName = img.getOriginalFilename();
      if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
        File file = new File(path, fileName);
        img.transferTo(file);
      }
    }
  }
}

Multipart File[]은 이렇게 강력 합 니 다.한 개 이상 의 논리 적 처리 와 마찬가지 로 프로젝트 개발 에 Multipart File[]을 파일 의 수신 매개 변수 로 사용 하 는 것 을 권장 합 니 다.
확장
1.MultipartFile 류 에서 자주 사용 하 는 방법:

String getContentType()//    MIME  
InputStream getInputStream()//     
String getName() //            
String getOriginalFilename() //         
long getSize() //         ,  byte
boolean isEmpty() //    
void transferTo(File dest)
2.Commons Multipart Resolver 의 속성 분석
  • default Encoding:request 요청 을 분석 하 는 기본 인 코딩 형식 을 표시 합 니 다.지정 되 지 않 았 을 때 Servlet 규범 에 따라 기본 값 ISO-8859-1 을 사용 합 니 다.request 가 인 코딩 형식 을 가리 키 면 지정 한 default Encoding 을 무시 합 니 다.
  • uploadTempDir:파일 을 업로드 할 때의 임시 디 렉 터 리 를 설정 합 니 다.기본 값 은 Servlet 용기 의 임시 디 렉 터 리 입 니 다.
  • max Upload Size:업로드 할 수 있 는 최대 파일 크기 를 설정 하고 바이트 단위 로 계산 합 니 다.-1 로 설정 하면 무제 한 을 표시 합 니 다.기본 값 은-1 입 니 다.
  • max UploadSizePerFile:max UploadSize 와 차이 가 많 지 않 지만 max UploadSizePerFile 은 업로드 파일 마다 크기 를 제한 하고 max UploadSize 는 전체 업로드 파일 크기 를 제한 합 니 다.
  • maxInMemory Size:파일 업로드 시 메모리 에 쓸 수 있 는 최대 값 을 설정 하고 바이트 단위 로 계산 합 니 다.기본 값 은 10240 입 니 다.
  • resolve Lazily:true 일 때 UploadAction 에서 파일 크기 이상 을 캡 처 할 수 있 도록 지연 파일 분석 을 사용 합 니 다.
  • 주의
  • 개발 과정 에서 설정 파일 의 이상 해석 기(Simple Mapping Exception Resolver)를 먼저 주석 하여 오 류 를 볼 수 있 도록 하 는 것 을 권장 합 니 다.
  • 가끔 업로드 오류 가 발생 하 는 이 유 는 저희 가 프로필 에 업로드 파일 의 크기 를 제한 하기 때 문 입 니 다.이 제한 을 추가 하지 않 아 도 됩 니 다.그러나 개인 적 으로 이 제한 을 추가 하 는 것 이 좋 습 니 다.구체 적 인 파일 크기 제한 은 회사 프로젝트 상황 에 따라 결정 하 는 것 이 좋 습 니 다.
  • SpringMVC 에서 MultipartFile 을 사용 하여 업로드 파일 을 받 으 려 면 두 개의 jar 패키지 에 의존 해 야 합 니 다.각각 comons-fileupload-1.3.3.jar,comons-io-2.5.jar 입 니 다.
  • 이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기