相关文章推荐
不拘小节的毛衣  ·  ModelCheckpoint-CSDN博客·  9 月前    · 
谈吐大方的人字拖  ·  均匀分布- ...·  1 年前    · 
个性的小马驹  ·  python ...·  1 年前    · 

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

      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public Mono<String> 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,可以使用DataBufferUtils写到文件
或者直接使用transferTo写入到文件
文件下载

   @GetMapping("/download")
    public Mono<Void> 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容器的import javax.servlet.http.HttpServletRequestimport javax.servlet.http.HttpServletReponse了,
取而代之的是org.springframework.http.server.reactive.ServerHttpRequest
以及org.springframework.http.server.reactive.ServerHttpResponse。
                    本文主要讲述一下spring webflux的文件上传和下载。maven      &lt;dependency&gt;            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;            &lt;artifactId&gt;spring-boot-starter-webflux&lt;/artifactId&gt;        &lt;/dependency&gt;文件上传@PostMapping(v
文件
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Mono&lt;String&gt; requestBodyFlux(@RequestPart("file") FilePart filePart) throws IOE...
数值类型:整数(byte,short,int,long)、浮点数(float,double)、字符(char)
非数值类型:布尔(boolean)
引用数据类型:类(class)、接口(interface)、数组[]
2、面向对象
三大特性:继承、封装、多态
关键字的作用:
final
当用final修饰一个类时,表明这个类不能被继承。String类就是一个final类
修饰方法,不能被修改。
修饰变量,不可变。
static
				
spring webflux 系列之 上文件到七牛云篇(不用本地创建文件直接内存上) 本次我介绍springboot 下 webflux文件到七牛云; 网上基本上全部教程都是创建本地文件 才去上七牛云 又要删除本地文件; 所以我直接放在内存里面 上 代码如下: //写法一:Mono<FilePart> @PostMapping("/upload") public Mono<Response> uploadFile(@RequestPart(val
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <depende
WebFluxSpring Framework 5 中引入的响应式编程框架,它提供了非阻塞式的编程模型,适用于高并发的场景。要实现一个基于 WebFlux文件服务器,可以按照以下步骤进行: 1. 创建一个基于 WebFluxSpring Boot 项目,引入相关的依赖。 2. 编写一个 Controller 类,用于处理文件下载请求。在该类中,可以使用 Flux 和 DataBuffer 实现非阻塞式的文件读取和输。 3. 配置文件服务器的根目录和文件目录,可以使用配置文件或者代码配置的方式实现。 4. 实现文件功能,可以使用 Spring WebFlux 提供的 MultipartResolver 和 ResourceEncoder 来实现。 需要注意的是,在开发基于 WebFlux文件服务器时,需要考虑到高并发场景下的性能问题,例如文件读取、输和上等操作的优化。同时,还需要考虑安全性和权限控制等问题。