关键点:
- 要设置请求头的Content-Type
- 将File转换格式FileSystemResource
public Response<FilePushResponse> pushFile(FilePushRequest filePushRequest, MultipartFile multipartFile) {
String fileName = "app_push_" + new Date().getTime();
String originName = multipartFile.getOriginalFilename();
// 后缀
String suffix = originName.substring(originName.lastIndexOf("."));
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("multipart/form-data"));
try {
File file = File.createTempFile(fileName, suffix);
file.deleteOnExit();
multipartFile.transferTo(file);
// MulitiTypeFile要进行类型转化
FileSystemResource resource = new FileSystemResource(file);
//设置请求体,注意是LinkedMultiValueMap
MultiValueMap<String, Object> form = new LinkedMultiValueMap<String, Object>();
form.add("file", resource);
form.add("alert", filePushRequest.getAlert());
form.add("pushConfigCode", filePushRequest.getPushConfigCode());
form.add("notificationActionUri", filePushRequest.getNotificationActionUri());
form.add("notificationActionType", filePushRequest.getNotificationActionType());
form.add("extras", filePushRequest.getExtras());
form.add("titile", filePushRequest.getTitile());
HttpEntity<MultiValueMap<String, Object>> entity = new HttpEntity<>(form, headers);
ResponseEntity<FilePushResponse> ret = restTemplate.postForEntity(url + "/push/file", entity, FilePushResponse.class);
return Response.getInstance(ret.getBody());
} catch (IOException e) {
log.error("IO Exception:{}", JSON.toJSONString(e));
throw new BizException("文件上传异常");
}
}