java 调用第三方接口,上传附件简单例子
假设调用的第三方接口为上传.jpg,.jpeg附件,以文件流形式上传,无其它参数。
比如第三方接口为c#开发,接口参数为:
/// <summary> /// 上传附件 /// </summary> /// <param name="formCollection"></param> /// <returns></returns> [HttpPost("UploadFile")] [RequestSizeLimit(10_000_000)] [AllowAnonymous] public async Task<WebApiResult> UploadFile([FromForm] IFormCollection formCollection) { ...
实现逻辑:
a.先构建请求URL
b. 按第三方接口文档处理多文件上传请求参数,构建HttpHeaders,HttpEntity
c.使用RestTemplate请求第三方接口
d.处理返回结果
@PostMapping("/UploadFile") public String UploadFile(@RequestParam("file") MultipartFile multipartFile) throws Exception { try { String url="http://***/UploadFile"; if( !multipartFile.getResource().exists()) return "文件不存在"; String[] extObjs={".jpg",".jpeg"}; String fileName = multipartFile.getOriginalFilename(); String ext = FileUtil.getFileExt(fileName); if (!Arrays.asList(extObjs).contains(ext)) return "文件为空或文件格式不正确!"; MultiValueMap<String, Object> param = new LinkedMultiValueMap<>(); param.add("file", multipartFile.getResource()); RestTemplate request = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(param, headers); ResponseEntity<Map> response = request.postForEntity(url, requestEntity, Map.class); if (response.getStatusCode() != HttpStatus.OK) { return "返回状态码:"+ response.getStatusCode(); } Map result = response.getBody(); return JSON.toJSONString(result); } catch (Exception ex) { return ex.getMessage() ; } }
运行项目,使用postman测试: