【问题标题】:Spring Webflux: Delete file after onComplete of ServerResponseSpring Webflux:在ServerResponse的onComplete之后删除文件
【发布时间】:2022-01-10 12:20:39
【问题描述】:

我想删除返回 ServerResponse 后使用的临时文件。

我已经尝试过 Mono.doFinally 但这在 OnComplete 之前运行,在发送 ServerResponse 之前删除文件。

任何帮助都会很好。谢谢。

Resource resource = new FileSystemResource(filePath);

 return ServerResponse.ok()
  .body(BodyInserters.fromResource(resource))
.doFinally(signalType-> {
//Code for deleting
});

【问题讨论】:

    标签: spring-boot netty spring-webflux project-reactor


    【解决方案1】:

    我找到了解决办法:

    我创建了一个自定义 WebFilter。 WebFilterChain 结束后,响应以 JSON 形式发回。 do finally 代码可以运行。

        @Component
        @Slf4j
        public class CustomFilter implements WebFilter {
        
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
                return chain.filter(exchange)
                        .doFinally(f-> /*Code for deletion*/;
            }
        }
    

    为了跟踪要删除的文件,我创建了一个带有静态并发 hashmap 的单例 bean,其中 key 是请求的 id。

    • 在 serverHttpRequest 的情况下,键就像serverHttpRequest.getId()
    • 如果是 ServerWebExchange 键将是 exchange.getRequest().getId()
    • 如果在 RouterFunction 中使用 ServerRequest,则键为 serverRequest.exchange().getRequest().getId()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-11
      • 2018-10-06
      • 1970-01-01
      • 2019-04-04
      • 2020-05-01
      • 2018-10-19
      • 1970-01-01
      • 2014-07-20
      相关资源
      最近更新 更多