前言:在开发对接抖音平台时,发现需要在后台选取文件,请求给抖音。使用spring官方的http客户端,如何传输文件呢,主要是传输文件需要给file设置key。
知识点1:将文件读取为Resource资源
FileSystemResource resource = new FileSystemResource(tempFilePath);
知识点2:
设置带key的参数
MultiValueMap<String,Object> param = new LinkedMultiValueMap<>();
param.add("video",resource);
HttpEntity<MultiValueMap<String,Object>> formEntity = new HttpEntity<>(param,httpHeaders);
demo(备注,这个不是对接抖音的实际代码,请自行组织)
@RequestMapping(value = "toImport")
public ResponseEntity tpImpl(MultipartFile fileUpload, HttpServletRequest request)throws IOException{
RestTemplate restTemplate = new RestTemplate();
//获取临时文件
String tempFilePath = System.getProperty("java.io.tmpdir")+fileUpload.getOriginalFilename();
File file = new File(tempFilePath);
fileUpload.transferTo(file);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Accept", MediaType.APPLICATION_JSON.toString());
httpHeaders.setContentType(MediaType.parseMediaType("multipart/form-data;charset=UTF-8"));
MultiValueMap<String,Object> param = new LinkedMultiValueMap<>();
//把临时文件转换成FileSystemResource
FileSystemResource resource = new FileSystemResource(tempFilePath);
param.add("video",resource);// 对应客户端的接收参数名称
HttpEntity<MultiValueMap<String,Object>> formEntity = new HttpEntity<>(param,httpHeaders);
String imports = String.format("http://%s:%s/client/toImportFile", request.getParameter("ip"), request.getParameter("port"));
ResponseEntity responseEntity = restTemplate.postForEntity(imports, formEntity, Result.class);
log.info("tempFilePath={}",tempFilePath );
return new ResponseEntity(responseEntity.getBody(), HttpStatus.OK);
}
done