精讲响应式WebClient第4篇-文件上传与下载
【精讲响应式WebClient第4篇-文件上传与下载】本文是精讲响应式WebClient第4篇,前篇的blog访问地址如下:
- 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法
- 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解
- 精讲响应式WebClient第3篇-POST、DELETE、PUT方法使用
- 一个以访问服务URI为"/upload”的文件上传服务端点
- 服务端点上传文件成功后会返回一个HTTP连接,可以用来下载文件。
一、文件上传 在本地8888端口搭建了一个文件上传接收的服务端,服务端点为“/upload”。上传本地磁盘中的一个文件"D:\data\local\splash.png"
@SpringBootTest
class UpDownLoadTests {//创建webClient
private WebClient webClient = WebClient.builder()
.baseUrl("http://localhost:8888/")
.build();
@Test
void testUpload(){
// 待上传的文件(存在客户端本地磁盘)
String filePath = "D:\\data\\local\\splash.png";
// 封装请求参数
FileSystemResource resource = new FileSystemResource(new File(filePath));
MultiValueMap param = new LinkedMultiValueMap<>();
param.add("uploadFile", resource);
//服务端MultipartFile uploadFile
//param.add("param1", "test");
//服务端如果接受额外参数,可以传递// 发送请求
Mono mono = webClient
.post() // POST 请求
.uri("/upload")// 请求路径
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.body(BodyInserters.fromMultipartData(param))
.retrieve() // 获取响应体
.bodyToMono(String.class);
//响应数据类型转换// 输出结果
System.out.println(mono.block());
}
}
输出打印结果如下:
![精讲响应式WebClient第4篇-文件上传与下载](https://img.it610.com/image/info8/dd61ef1c81d44926909ad28a2d9e78b4.jpg)
文章图片
文章上传之后返回一个HTTP URL访问地址,可以通过浏览器访问,也可以通过程序下载。
二、文件下载 执行下列代码之后,被下载文件url,会被正确的保存到本地磁盘目录
@Test
void testDownLoad() throws IOException {
Mono mono = webClient
.get() // GET 请求
.uri("/2020/08/22/0f0a353a-7033-4a13-832e-d043f6360514.png")// 请求路径
.accept(MediaType.APPLICATION_OCTET_STREAM)
.exchange();
// 获取响应体ClientResponse response = mono.block();
Resource resource = response.bodyToMono(Resource.class).block();
assert resource != null;
Files.copy(resource.getInputStream(),
Paths.get("D:\\data\\local\\splash-down.png" ));
}
欢迎关注我的博客,里面有很多精品合集
- 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
- 《手摸手教你学Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《实战前后端分离RBAC权限管理系统》
- 《实战SpringCloud微服务从青铜到王者》
- 《VUE深入浅出系列》
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus|mybatisplus where QueryWrapper加括号嵌套查询方式
- (七)谈条件
- 视频转换器哪种好用()
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- 与狗狗的相处公式
- 康德式公平倾向
- 种树郭橐驼传(文言句式+古今异义+词类活用+通假字)
- 10.两种记账方式
- 吃可爱长大的易烊千玺,一害羞就会耸肩,花式耸肩杀