Spring之RestTemplate如何上传文件呢?
下文笔者讲述使用RestTemplate上传文件的方法及示例分享,如下所示
RestTemplate上传文件的实现思路
将待上传文件包装为一个文件流,放入到httpEntity中 然后使用restTemplate.postForEntity即可发送文件至指定接口 或 1.使用MultiValueMap中放入file对象 2.使用restTemplate.postForEntity将文件对象发送至指定接口中例:restTemplate发送文件的示例分享
restTemplate从服务器文件系统中选文件上传
从文件系统上传文件时,需要把文件转换成FileSystemResource,然后放入HttpEntity中即可。代码如下: public UploadImageResponseVO uploadImg(String fileLocal) throws IOException { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); headers.setConnection("Keep-Alive"); headers.setCacheControl("no-cache"); FileSystemResource resource = new FileSystemResource(new File(fileLocal)); HttpEntity<FileSystemResource> httpEntity = new HttpEntity<>(resource); ResponseEntity<Resource> responseEntity = restTemplate.postForEntity(serverUrl, httpEntity, Resource.class); //对读到的内容映射成对应的实体类 XmlMapper xmlMapper = new XmlMapper(); UploadImageResponseVO uploadImageResponseVO = xmlMapper.readValue(responseEntity.getBody().getInputStream(), UploadImageResponseVO.class); logger.debug("responseEntity: {} ", uploadImageResponseVO); return uploadImageResponseVO; }
restTemplate转发接收的文件,直接上传图片
用multipart形式上传文件时 需要用到MultiValueMap<String, Object>类 用它装载文件对象以及multipart的表单数据。 注意事项: 从request中拿文件往MultiValueMap放时 不能直接request.getFile()给multiValueMap 因为这样放文件使用restTemplate上传文件时,会出现messageConverter转化时会报错 需将request.getFile("file").getResource()数据放入到multiValueMap 然后使用restTemplate上传文件
public UploadResponseVO resendUpload(String url,StandardMultipartHttpServletRequest request) throws IOException { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>(); parts.add("file",request.getFile("file").getResource()); Enumeration<String> enumeration= request.getParameterNames(); while(enumeration.hasMoreElements()){ String key = enumeration.nextElement(); parts.add(key,request.getParameter(key)); } HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(parts, headers); ResponseEntity<UploadResponseVO> responseEntity = restTemplate.postForEntity(url,httpEntity,UploadResponseVO.class); return responseEntity.getBody(); }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。