org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file' is not present




아주 희안한 버그였다 


//Servlet 2. x 에서 사용하는 설정

@Bean

public MultipartResolver multpartResolver() {


CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();


multipartResolver.setMaxUploadSize(1024*1024*100L);

multipartResolver.setMaxInMemorySize(1024*1024*40L);


return multipartResolver;

}




스프링 MultipartFile 로 파일 받아오는 api를 짜고있는데 


PostMan 으로 테스트 해보니  확장자 .mp3  파일은  성공적으로 받아지는데


그 이외의 확장자들은 전부 BadRequest 


org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file' is not present
 


이렇게 에러코드 400을 뱉는 것이였다.

(이게 원래는 전부 안되야 되는데 .mp3 확장자만 되는 것은 무엇????)



아 이거 Spring In Action 에서 봤던 내용이였는데 


이걸 읽어놓고 까먹어서 구글링하고 있다



스프링 부트는 1.2.x 버젼 이상에서는 기본적으로 Servlet 3.x 을 사용한다


 서블릿 3.x 이상 스펙에서는  multipartResolver를 외부 라이브러리 없이 


쓸수있게 자체 구현되어있는데 


스프링에서 Servlet 2.x 와 3.x 에서 다르게 구현체를 만들어놓았음



  • Servlet 3.0 Part API를 바탕으로 한 MultipartResolver 인터페이스 구현체
  • bean 을 선언할 때 별다른 확장설정을 하지 않고 “multipartResolver”로 선언
  • multipart와 관련된 업로드 파일 최대크기, 저장위치 등 설정을 하고 싶다면
    • web.xml에서 하거나
    • Servlet 등록하는 과정에서 MultipartConfigElement을 선언하면서 설정
    • @MultipartConfig라는 애노테이션 사용
  • Servlet 3.0 에서는 MultipartResolver 레벨에서 설정하는 것을 허용치 않는다.


  • 출처: http://java.ihoney.pe.kr/351 [허니몬(Honeymon)의 자바guru]




    //Servlet 3 이상 버젼에서의 설정 

    @Bean

    public MultipartConfigElement multipartConfigElement() {

        MultipartConfigFactory factory = new MultipartConfigFactory();


        factory.setMaxFileSize(MAX_UPLOAD_FILE_SIZE);

        factory.setMaxRequestSize(MAX_REQUEST_SIZE);

        factory.setFileSizeThreshold(FILE_SIZE_THREADHOLD);

        


        return factory.createMultipartConfig();

    }


    @Bean

    public MultipartResolver multipartResolver() {

        return new StandardServletMultipartResolver();

    }












    + Recent posts