前言:在开发对接抖音平台时,发现需要在后台选取文件,请求给抖音。使用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