[SPRING] Spring 4를 사용하여 MultipartFile 목록 업로드하기 restTemplate (Java Client & RestController)
SPRINGSpring 4를 사용하여 MultipartFile 목록 업로드하기 restTemplate (Java Client & RestController)
나는 내 RestController에 Restipemplate를 사용하여 MultipartFile의 List를 게시하려고 노력하고있다. 비록 나의 클라이언트와 컨트롤러에 사용할 정확한 문법과 타입에 대해서는 약간 혼란 스럽지만. 여기 제가 지금까지했던 연구를 기반으로 한 것은 ...
FileUploadClient.java
public void uploadFiles(List<MultipartFile> multiPartFileList) throws IOException {
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
List<Object> files = new ArrayList<>();
for(MultipartFile file : multiPartFileList) {
files.add(new ByteArrayResource(file.getBytes()));
}
map.put("files", files);
// headers is inherited from BaseClient
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(map, headers);
ResponseEntity<String> response = restTemplate.exchange(restURI + "/rest/fileupload/uploadfiles", HttpMethod.POST, request, String.class);
if(HttpStatus.OK.equals(response.getStatusCode())) {
System.out.println("status for /rest/fileupload/uploadfiles ---> " + response);
}
}
FileUploadRestController.java
@RequestMapping(value = "/uploadfiles", method = RequestMethod.POST)
public ResponseEntity<?> uploadFiles(@RequestParam("files") List<MultipartFile> files, HttpServletRequest request) {
ResponseEntity<?> response;
try {
// do stuff...
response = new ResponseEntity<>(header, HttpStatus.OK);
System.out.println("file uploaded");
} catch (Exception e) {
// handle exception
}
return response;
}
을 포함한다.
<filter>
<filter-name>multipartFilter</filter-name>
<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>multipartFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
spring-servlet.xml
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- max upload size in bytes -->
<property name="maxUploadSize" value="20971520" /> <!-- 20MB -->
<!-- max size of file in memory (in bytes) -->
<property name="maxInMemorySize" value="1048576" /> <!-- 1MB -->
</bean>
나는 그것을 올바르게 이해한다. multipart 필터는 My MultiValueMap을 List of MultipartFiles와 MultipartHttpServletRequest로 구문 분석해야합니까? 내 클라이언트가 내 RestController에 도달 할 수있는 유일한 방법은 ByteArrayResource로 파일 데이터를 보내는 것입니다. 그러나 내 컨트롤러에서 RequestBody는 항상 null이고 MultipartHttpServletRequest에는 multipartFiles 특성에 대한 빈 맵이 있습니다. 이 문제를 해결하기 위해 수많은 게시물을 검토했지만 아무 소용이 없습니다. 어떤 도움이라도 대단히 감사 할 것입니다.
해결법
-
==============================
1.FileUploadClient에서 보내는 요청 페이로드가 서버가 기대하는 것과 일치하지 않는 것 같습니다. 다음을 변경해보십시오 :
FileUploadClient에서 보내는 요청 페이로드가 서버가 기대하는 것과 일치하지 않는 것 같습니다. 다음을 변경해보십시오 :
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>(); for(MultipartFile file : multiPartFileList) { map.add(file.getName(), new ByteArrayResource(file.getBytes())); }
에
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>(); List<ByteArrayResource> files = new ArrayList<>(); for(MultipartFile file : multiPartFileList) { files.add(new ByteArrayResource(file.getBytes())); } map.put("files", files);
또한 서버의 메소드 서명을 다음과 같이 변경해보십시오.
public ResponseEntity<?> uploadFiles(@RequestParam("files") List<MultipartFile> files, HttpServletRequest request) {
최신 정보
여러 파일을 업로드하는 동안 ByteArrayResource의 getFileName이 매번 같은 값을 반환하는지 확인해야합니다. 그렇지 않으면 빈 배열이 항상 생깁니다.
예 : 나를 위해 다음 작품 :
고객:
MultiValueMap<String, Object> data = new LinkedMultiValueMap<String, Object>(); for(MultipartFile file : multiPartFileList) { ByteArrayResource resource = new ByteArrayResource(file.getBytes()) { @Override public String getFilename() { return ""; } }; data.add("files", resource); }
섬기는 사람
public ResponseEntity<?> upload(@RequestParam("files") MultipartFile[] files){
from https://stackoverflow.com/questions/42212557/uploading-a-list-of-multipartfile-with-spring-4-resttemplate-java-client-rest by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] url에서 param을 통해 전송 된 client_id 및 client_secret (0) | 2019.04.13 |
---|---|
[SPRING] @StepScope (Spring 배치 내에서 param 전달시 예외 발생) (0) | 2019.04.13 |
[SPRING] PropertyPlaceholderConfigurer는 DB 값을 찾고 속성 파일을 대체로 사용합니다. (0) | 2019.04.13 |
[SPRING] Spring MVC 프레임 워크를 통해 다른 JSP를 포함시키는 것이 좋은 생각인가? (0) | 2019.04.13 |
[SPRING] 속성 파일에서 Spring @ Scheduled cron 세부 정보 - 예외 (0) | 2019.04.13 |