Spring之RestTemplate如何上传文件呢?

戚薇 Java经验 发布时间:2023-05-16 15:46:25 阅读数:1991 1
下文笔者讲述使用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();
    }
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202305/16842232136470.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者