사진을 서버에 업로드하기 위해 내가 작성한 컨트롤러에 문제가 있습니다.다중 요청 요청 봄이 파일 데이터를 바인딩하지 않습니다.
컨트롤러
@RequestMapping(value = "photos", method = RequestMethod.POST)
@ResponseBody
public Response uploadPhoto(@RequestPart PhotoMetaData data,
@RequestParam String localName,
@RequestPart(required = false) MultipartFile file,
HttpServletRequest request) {
log.info("@uploadPhoto > ip of request: " + request.getRemoteAddr() + ", metaData: " + data);
return photosService.storePhoto(data, file, localName);
}
문제는 file
가 null이다하지만 request
매개 변수를 검사 할 때 요청이 명확하게 각 또한이 해야하는있다 contentType이 3 멀티 PARAMS을 가지고 있지만 파일이 긴 문자열입니다.
안드로이드 응용 프로그램은이 코드를 호출한다. 나는 다중 요청을 만들기 위해 OkHttp를 사용하고있다. 코드 :
MediaType jsonMediaType = MediaType.parse("application/json");
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addPart(Headers.of("Content-Disposition", "form-data; name=\"data\""),
RequestBody.create(jsonMediaType, photoMetaDataStr))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"localName\""),
RequestBody.create(MediaType.parse("text/plain"), localName.getPath()))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"file\""),
RequestBody.create(MediaType.parse("image/jpeg"), new File(localName.getPath())))
.build();
Request request = new Request.Builder().url(url).post(requestBody).build();
final Response response = client.newCall(request)
.execute();
------ 편집 ------------
관련 콩 :
@Bean
public MultipartResolver multipartResolver() {
return new CommonsMultipartResolver();
}
---- 편집 2 - --- 컨트롤러 서명을 변경 한 후 파일이 필요합니다. 예외가 발생합니다.
---- EDIT 3 ------ 광범위한 테스트를 통해 문제가 발생한 것 같습니다. 내가 okHttp를 사용하는 방법 der를 사용하여 멀티 파트 요청을 서버에 보냅니다. 우체부 클라이언트를 사용하여 통화 시간에 대한 성공적인
error with request org.springfra[email protected]3d854606
org.springframework.web.multipart.support
.MissingServletRequestPartException: Required request part 'file' is not present.
감사했고
로이
'MultipartFile' 매개 변수에 대해'@ RequestParam' 대신'@ RequestPart'를 시도하십시오. –
@ M.Deinum 귀하의 회신에 감사드립니다. '@ RequestParam'을'@ RequestPart '로 변경하는 것을 포함하여 모든 가능한 조합을 이미 시도했습니다. 작동하지 않는다 – royB
작동하지 않으면 구성에 결함이있는 것입니다. 모든 것이'String' 또는'String []'이라는 사실은 웹의 작동 방식만큼이나 이상하지 않습니다. 매개 변수는 나중에 변환됩니다. 그러나'@ RequestParam'이 아닌'@ RequestPart' 여야합니다.'String'에서 요청 유형으로의 변환은 둘 사이에서 완전히 다르게 처리됩니다. 디버그 정보로 컴파일되었는지 확인한 후 디버깅을 위해'required'를 true로 설정하면 (그리고 어떤 에러가 나올지),'@RequestPart (value = "file"), required = false)'를 사용해보십시오. –