【问题标题】: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()