zoukankan      html  css  js  c++  java
  • 使用RestTemplate调用接口上传文件

    场景

    接口接受一个文件,缓存在本地,验证文件的完整性及内容,然后将文件上传至云服务器;

    下面只写利用RestTemplate将文件上传至云服务器,至于文件上传以及缓存在本地可以参考:JAVA文件上传:RESTFUL接口接收上传文件,缓存在本地

    代码

    @Test
        public void restTemplateTransferFile(){
            final String filePath = "F:";
            final String fileName = "testFile.txt";
            final String url = "http://localhost:8080/file/upload";
    
            RestTemplate restTemplate = new RestTemplate();
    
            //设置请求头
            HttpHeaders headers = new HttpHeaders();
            MediaType type = MediaType.parseMediaType("multipart/form-data");
            headers.setContentType(type);
    
            //设置请求体,注意是LinkedMultiValueMap
            FileSystemResource fileSystemResource = new FileSystemResource(filePath+"/"+fileName);
            MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
            form.add("file", fileSystemResource);
            form.add("filename",fileName);
    
         //用HttpEntity封装整个请求报文
            HttpEntity<MultiValueMap<String, Object>> files = new HttpEntity<>(form, headers);
    
            String s = restTemplate.postForObject(url, files, String.class);
            System.out.println(s);
        }

    利用HttpHeader将请求头的设置为"multipart/form-data";

    利用FileSystemResource封装文件内容,将请求体用LinkedMultiValueMap封装;

    再用HttpEntity封装整个请求报文;

    最后利用RestTemplate post请求。

    注意

    这里我使用的是原生的RestTemplate(直接new的),比如使用OAuth2RestTemplate用上面这种方式传输文件,可能出现RestClientException,原因可能是OAuth2RestTemplate的HttpMessageConvert不能匹配MultiValueMap。

    参考:https://blog.csdn.net/kahhy/article/details/78115698

  • 相关阅读:
    python_24_test
    python_23_tuple
    python_22_enumerate
    python_20_列表
    python_21_copy
    python_19_编码解码
    python_18_三元运算
    python_16_自己建立模块
    关于主键(PRIMARY KEY)和自增(AUTO_INCREMENT)结合使用的知识点
    MySQL root用户忘记密码怎么办?修改密码方法:skip-grant-tables
  • 原文地址:https://www.cnblogs.com/theRhyme/p/10110416.html
Copyright © 2011-2022 走看看