我有一个在Spring boot reactive中开发的Web应用程序。我必须解压缩文件并将文件信息保存在数据库中。所有执行都是完全反应性的(通量/单声道)。
现在我有一个代码要解压缩,使用Java工具
public void Flux<AppFile> saveFiles(){
ZipInputStream zis = new ZipInputStream(new FileInputStream( BASE_URL + filename ));
while( zis.getNextEntry() != null ){
reactiveRepository.save( new AppFile( "name", "description", zipEntry.getFileName());
}
....
return Flux.just(..); // not a clean way to return a flux.
}
如您所见,while循环是标准方式,但实体保存是反应式的。
如何将此迭代器转换为流,以便我可以在响应式中处理所有内容。
看看这有没有帮助
return Flux.<ZipEntry>generate(sink -> {
ZipInputStream zis = new ZipInputStream(inputStream);
ZipEntry zipEntry;
try {
if ((zipEntry = zis.getNextEntry()) == null)
sink.complete();
else
sink.next(zipEntry);
} catch (IOException ex) {
sink.error(new RuntimeException(ex));
}
}).map( e -> new AppFile("name", "description", e.getName()))
.doOnNext(reactiveRepository::save);