RestTemplate发送带文件的请求
服务A
@PostMapping("/CloudUploadFile")
@ResponseBody
public String UploadFile(MultipartFile file, String module) throws IOException{
MultiValueMap<String, Object> bodyParams = new LinkedMultiValueMap<>();
org.springframework.core.io.Resource resource = new ByteArrayResource(file.getBytes()){
@Override
public String getFilename() {
return file.getOriginalFilename();
}
};
bodyParams.add("file", resource);
bodyParams.add("module",module);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(bodyParams, headers);
String Result= restTemplate.postForObject(ManagementURL+"/CloudUploadFile/", requestEntity, String.class);
return Result;
}
服务B
@PostMapping("/CloudUploadFile")
@ResponseBody
public String UploadFile(@RequestParam("file") MultipartFile file,@RequestParam("module") String module){
return managementService.ExecuteCloudUploadFile(file,module);
}
接收文件夹包含很多文件的情况
服务A
@PostMapping("/LexerRunUploadFile")
@ResponseBody
public String LexerRunUploadFile(HttpServletRequest request) throws IOException{
MultipartHttpServletRequest params=((MultipartHttpServletRequest) request);
List<MultipartFile> files = params.getFiles("file");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> paramsMap = new LinkedMultiValueMap<>();
String Result="";
try {
for(MultipartFile file : files) {
ByteArrayResource resource = new ByteArrayResource(file.getBytes()) {
@Override
public String getFilename() {
return file.getOriginalFilename();
}
};
paramsMap.add("files", resource);
}
// 构造请求的实体。包含body和headers的内容
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(paramsMap, headers);
Result= restTemplate.postForEntity(LexerRunUrl+"/LexerRunUploadFile/", requestEntity, String.class).getBody();
} catch (Exception e) {
e.printStackTrace();
}
return Result;
}
服务B
@RequestMapping(value ="/LexerRunUploadFile",method = RequestMethod.POST,
consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ResponseBody
public String LexerRunUploadFile(@RequestPart("files") List<MultipartFile> files){
return LexerClauserService.uploadFile(files);
}