Spring WebFlux FilePart TransferTo 方法无法将文件写入目标路径

标签 spring spring-boot spring-webflux

import org.springframework.http.codec.multipart.FilePart;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;

import java.io.File;

@RestController
public class TestController {

    @PostMapping("test")
    public Mono<R> test(FilePart file){
        String fileName = file.filename();
        File newFile = new File("F:/images/banner/",fileName);
        file.transferTo(newFile);
        return Mono.just(R.ok());
    }
}

我上传图片并使用transferTo方法将文件写入目标路径。 但我在 F:/images/banner/ 中找不到图片 有人可以帮助我吗?谢谢

最佳答案

在编写响应式(Reactive)代码时,您必须确保它终止,或者换句话说,您需要订阅发布者。 file.transferTo() 返回 Mono<Void>如果您不订阅,实际上不会执行任何操作。

根据您的情况,您可以执行以下操作,请使用 then返回结果的方法。

@PostMapping("test")
public Mono<R> test(FilePart file){
    String fileName = file.filename();
    File newFile = new File("F:/images/banner/",fileName);
    return file.transferTo(newFile)
      .then(Mono.just(R.ok()));
}

现在您返回调用链,客户端将订阅,事情将开始发生。您还可以添加额外的 onError当传输中出现问题时,调用以返回错误响应。

关于Spring WebFlux FilePart TransferTo 方法无法将文件写入目标路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73810669/

相关文章:

java - 使用 IBM WAS ConnectionFactory 和 Spring 时出错

spring - 如何将 Spring Hatoas ControllerLinkBuilder 用于 Thymeleaf 模板化的预定电子邮件

java - 错误消息的顺序不正确

java - Quartz CronTrigger 未在指定的 startAt() 时间触发

java - Spring Actuator http,但嵌入式 servlet https

spring - 如何使用 WebClient 使用响应式 Spring Rest API

java - 将 RxJava Single 转换为 Mono

spring-security - 同一场比赛中的 webflux 安全多重角色

java - 404 运行简单 Spring MVC HelloWeb 时请求的资源不可用

java - 可以将自定义数据返回给 Kafka Producer