博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring webflux文件上传下载
阅读量:6091 次
发布时间:2019-06-20

本文共 1873 字,大约阅读时间需要 6 分钟。

本文主要讲述一下spring webflux的文件上传和下载。

maven

org.springframework.boot
spring-boot-starter-webflux

文件上传

@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)    public Mono
requestBodyFlux(@RequestPart("file") FilePart filePart) throws IOException { System.out.println(filePart.filename()); Path tempFile = Files.createTempFile("test", filePart.filename()); //NOTE 方法一 AsynchronousFileChannel channel = AsynchronousFileChannel.open(tempFile, StandardOpenOption.WRITE); DataBufferUtils.write(filePart.content(), channel, 0) .doOnComplete(() -> { System.out.println("finish"); }) .subscribe(); //NOTE 方法二// filePart.transferTo(tempFile.toFile()); System.out.println(tempFile.toString()); return Mono.just(filePart.filename()); }
使用RequestPart来接收,得到的是FilePart
FilePart的content是Flux<DataBuffer>,可以使用DataBufferUtils写到文件
或者直接使用transferTo写入到文件

文件下载

@GetMapping("/download")    public Mono
downloadByWriteWith(ServerHttpResponse response) throws IOException { ZeroCopyHttpOutputMessage zeroCopyResponse = (ZeroCopyHttpOutputMessage) response; response.getHeaders().set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=parallel.png"); response.getHeaders().setContentType(MediaType.IMAGE_PNG); Resource resource = new ClassPathResource("parallel.png"); File file = resource.getFile(); return zeroCopyResponse.writeWith(file, 0, file.length()); }
这里将数据写入ServerHttpResponse

小结

使用webflux就没有之前基于servlet容器的HttpServletRequest及HttpServletReponse了,取而代之的是org.springframework.http.server.reactive.ServerHttpRequest以及org.springframework.http.server.reactive.ServerHttpResponse。

doc

转载地址:http://tpmwa.baihongyu.com/

你可能感兴趣的文章
Yii 2 —— session
查看>>
烂泥:haproxy学习之https配置
查看>>
给C语言初学者的忠告——计算机达人成长之路(27)
查看>>
【思考】互联网产业发展趋势
查看>>
Vmware view 5.0 POC环境搭建参考v1.0
查看>>
编程小知识点范例-1
查看>>
同一Tomcat 多个端口部署不同的项目
查看>>
mysql启用审计功能
查看>>
《ASP.NET 开发从入门到精通》----第1章 ASP.NET基础 1.1 认识网页和网站
查看>>
从Docker Hub和docker-registry看优秀的后端服务设计实现
查看>>
暴增 Emacs 生产力的十大最佳插件
查看>>
C语言蛇形填数
查看>>
Java Reflection(四):变量
查看>>
图解css3:核心技术与案例实战. 2.2 基本选择器
查看>>
《通信技术导论(原书第5版)》——1.5 通过多路复用增加网络容量
查看>>
Disruptor入门
查看>>
ROS机器人程序设计(原书第2版)2.5 本章小结
查看>>
Kafka可靠性的思考
查看>>
《乐高EV3机器人搭建与编程》——2.9 小结
查看>>
《Cucumber:行为驱动开发指南》——导读
查看>>