2016-08-01 2 views
0

내가 해보려해도이 문제를 파악할 수없는 것 같습니다.스프링 부트 + 멀티 파트/폼 데이터 컨트롤러 방법

FILEDATA 변수는 항상 null이며,
@RequestMapping(consumes = {"multipart/form-data"}, method = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE}, path = {"/rest", "/rest/**"}) 
public void handleMultipartRestApiRequest(MultipartHttpServletRequest request, HttpServletResponse response, @RequestPart(value = "filedata", required = false) MultipartFile filedata) throws Exception { 
    r... 
} 

요청 개체 : 나는 다음과 같은 방법으로 주석 @RestController는 봄 부팅 1.4 응용 프로그램을

curl -v -F name=countries.zip -F [email protected] http://localhost:8080/rest 

:이 curl 명령을 제출하고있어 항상 0 개의 파일을 보여줍니다.

MultipartResolver를 사용하여 여러 구성을 시도했습니다.

multipart.enabled=true 

spring.http.multipart.enabled = 사실

:

@Bean 
public MultipartResolver multipartResolver() { 
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); 
    multipartResolver.setMaxUploadSize(5000000); 
    multipartResolver.setMaxInMemorySize(5000000); 
    multipartResolver.setDefaultEncoding("utf-8"); 
    return multipartResolver; 
} 

나는 또한 수동으로 application.properties에서이 붙어 그냥이 비활성화 것 1천% 확인하기 위해 : 여기 내 최신

좋은 측정을 위해, 여기에 요청 헤더 :

* Connected to localhost (::1) port 8080 (#0) 
> POST /rest HTTP/1.1 
> Host: localhost:8080 
> User-Agent: curl/7.43.0 
> Accept: */* 
> Content-Length: 817999 
> Expect: 100-continue 
> Content-Type: multipart/form-data; boundary=------------------------7d3f4606455e862b 
> 

누구 단서 왜이 컨트롤러에서 파일을 볼 수없는 것 같습니다.

UPDATE 1 :

내가 요청 객체에 충분히 파고 org.catalina.connector.Request 객체에 도착하는 경우에 대한 정보를 보유하는 것 같다 DiskFileItem를 포함 ApplicationPart 항목의 ArrayList를이 내가 업로드하려고하는 파일. 이것은 실제로 request.getParts()를 호출 할 때 반환되는 Collection입니다. "isFormField"와 같은 그것은 또한 콘텐츠 형식이 응용 프로그램/octet-stream을가, 크기가 -1 말합니다 그러나

/private/var/folders/n8/15d6vbhj0692cslf3cx8c1jm0000gn/T/tomcat.6840182548028446450.8080/work/Tomcat/localhost/myapp 

, 그리고 몇몇 다른 이상한 것들, 심지어 거짓 : 파일 항목의 위치 경로는 약간 긴 TMP 경로입니다 내 컬 명령에서 양식 필드로 지정하고 있지만. 그래서 봄은 multipart/form-data 요청을 처리하는 올바른 방법을 요구하고 있지만, "part"정보는 그것이 옥텟 스트림이라고 생각하는 것 같습니다.

+0

나는 당신이 당신의 Multipart Object를 인스턴스화하지 않았다고 겸손하게 생각합니다. 좋아요 : MultipartFile filedata = fileToBeAdded.getSomething(); –

+0

무슨 뜻인지 확실하지 않습니다 ... 요청에있는 파일을 기대하고 있습니다. Map map = request.getFileMap();과 같은 작업을 수행하면지도가 비어 있습니다. – Bal

+0

'@ RequestPart' 대신'@ RequestParam'을 시도하십시오. –

답변

-1

MultipartFile을 사용하여 파일을 업로드하는 기능을 공유 할 것입니다. 리졸버 또는 빈은 필요하지 않지만, 다른 유형의 매개 변수 나 본문이 아닌 파일 만 보낼 수 있습니다.

@RequestMapping(value = "/updatePhoto", method = RequestMethod.POST) 
public @ResponseBody 
    ResponseEntity<?> updateUsuario(@RequestParam("file") MultipartFile file, 
     OAuth2Authentication authentication) { 
    try { 
     User user = (User) authentication.getPrincipal(); 
     Usuarios u = usuariosDAO.findUsuarioByUsername(user.getUsername()); 
     if (file.getName().isEmpty() == false) { 
      InputStream inputStream = file.getInputStream(); 
      ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
      int nRead; 
      byte[] bytes = new byte[16384]; 
      while ((nRead = inputStream.read(bytes, 0, bytes.length)) != -1) { 
       buffer.write(bytes, 0, nRead); 
      } 
      buffer.flush(); 
      u.setImagen(buffer.toByteArray()); 
      usuariosDAO.updateUsuario(u); 
     } 
    } catch (Exception e) { 
     return new ResponseEntity<>(HttpStatus.BAD_REQUEST); 
    } 
    return new ResponseEntity<>(HttpStatus.OK); 
} 

이 경우 프로필 사용자의 사진을 업로드하고이를 바이트 배열로 변환합니다. 그런 다음 데이터베이스에 저장됩니다. 이게 도움이되기를 바랍니다.

+0

감사합니다 파울로 -하지만 내 문제는 MultipartFile 변수는 항상 null이며 나는 이유를 알 수없는 것 같습니다. – Bal

관련 문제