场景

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

下面只写利用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

使用RestTemplate调用接口上传文件的更多相关文章

  1. RestTemplate通过InputStreamResource上传文件

    需求:从ftp取文件并http调用某接口上传此文件 偷懒的话可以从ftp上取文件存到本地,再调用接口上传文件,如下 String ftpPath = "/ftp/path/file.bin& ...

  2. Shell脚本调用ftp上传文件

    Shell脚本调用ftp上传文件 1.脚本如下 ftp -n<<! open x.x.x.x ###x.x.x.x为ftp地址 user username password ###user ...

  3. 使用python或robotframework调multipart/form-data接口上传文件

    这几天调一个multipart/form-data类型的接口,遇到点小阻碍.之前同事有使用urllib库写了个类似的方法实现,比较长,想要改的时候发现不太好使.在网上查找发现用requests库做这个 ...

  4. C# HttpWebRequest 后台调用接口上传大文件以及其他参数

    直接上代码,包各位看客能用!!! 1.首先请求参数的封装 /// <summary> /// 上传文件 - 请求参数类 /// </summary> public class ...

  5. java 调用Spring接口上传文件及其他参数填充

    第一步:在Spring配置中添加以下内容 <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> < ...

  6. Jmeter接口上传文件

    一.使用抓包软件抓取该接口,查看参数(图例使用的是charles) 可以看到上传文件的参数名是file1 二.把抓取到的普通参数都放在参数这一栏里,如图所示,不要在意马赛克 三.参数名称写在如图所示的 ...

  7. C# 使用HttpWebRequest通过PHP接口 上传文件

    1:上传文件实例 public void UploadXMLLog(string xmlpath)         {             NameValueCollection nvc = ne ...

  8. JAVA调用FTP上传文件

    import java.io.File; import java.io.FileInputStream; import org.apache.commons.net.ftp.FTP; import o ...

  9. Android、iOS与Servlet接口上传文件和JSON串的交互

    package etcom.servlet; import java.io.File; import java.io.IOException; import java.sql.Connection; ...

随机推荐

  1. 读取txt文件赋值到DataGridView中

    先查看txt是每条信息之间是通过什么分割,我是通过换行符(\n)分割的, 然后再看每一条信息中字段是通过什么分割,我的字段是通过 tab键(\t)分割. 第一步 先获取到txt文件的路径: //获取绝 ...

  2. CentOS 开发环境准备

    由于公司开发都是用的CentOS,如果不是使用docker的时候,难免会需要自己安装各种软件(例如,Python,nodejs等),然后这些软件还需要大量的依赖软件. 例如gcc等. 我们不需要一个一 ...

  3. css居中问题:水平居中、垂直居中

    亲们支持我的新博客哦==>原文地址 ) 本篇文章所有演示代码下载==>github/calamus0427 css水平垂直居中是面试时候遇到最多的问题,我总结一下大部分解决方案 水平居中: ...

  4. JS 变量是否有值的判断

    var node; …… 判断 node 是否有值,是否为 undefine,是否 null,直接使用两个!!,否定之否定: if (!!node){ .... }else{ .... } 这个条件判 ...

  5. 【Excel】绘图案例_常见复合图:簇状图+堆积图+折线图

    前言 最近有朋友让我帮忙用excel画图,老实说我很讨厌用excel画图,点来点去,复杂一些还不能复用,非常繁琐.当然,入门也很简单.需求时不同城市.不同产品的2016和2017销量及环比数据,这应该 ...

  6. 【译】在Flask中使用Celery

    为了在后台运行任务,我们可以使用线程(或者进程). 使用线程(或者进程)的好处是保持处理逻辑简洁.但是,在需要可扩展的生产环境中,我们也可以考虑使用Celery代替线程.   Celery是什么? C ...

  7. eclipse创建maven组合项目

    创建普通maven项目作为父项目: packaging类型选择pom. 创建子项目即可(需要mvn eclipse:eclipse构建为eclipse项目)

  8. 56.纯 CSS 描述程序员的生活

    原文地址:https://segmentfault.com/a/1190000015316996 感想:动画加延时,white-space: pre; 保留HTML p 中刻意留下的空白. HTML ...

  9. #Weex与Android交互(一)

    用Weex开发Android程序 参考:开发HelloWorld程序(Weex开发) 1.创建Android工程 2.集成WeexSDK,参考[WEEX SDK 集成到 Android 工程](htt ...

  10. jqGrid pivot获取所有行包括小计数据及原码分析

    1.结论:按正常jqGid获取,在中间加入以下代码,即将小计行当成改变为普能行,以便能让'getRowData'方法获取到,第三点会进行原码分析 //get all page grid data,in ...