首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Spring Webclient和AsynchronousFileChannel下载文件,文件为空

使用Spring Webclient和AsynchronousFileChannel下载文件,文件为空
EN

Stack Overflow用户
提问于 2021-04-27 22:32:44
回答 1查看 143关注 0票数 0

我想通过网址下载几张照片,使用Webflux和AsynchronousFileChannel,所有的文件都是创建的,但为空。

下面是我的代码:

代码语言:javascript
复制
public void downloadFilesFromUrl() throws IOException {
    List<Photo> notDownloadedFiles = //get photos with name and URL;
    for (Photo photo : notDownloadedFiles) {
        Path path = Paths.get(pathToFiles + File.separator + photo.getPhotoName());
        WebClient client = WebClient.builder().baseUrl(photo.getLoadSource()).build();
        Flux<DataBuffer> dataBufferFlux = client
                .get().accept(MediaType.APPLICATION_OCTET_STREAM)
                .retrieve()
                .bodyToFlux(DataBuffer.class);
        saveFileOnComputer(path, dataBufferFlux);
    }
}

private void saveFileOnComputer(Path path, Flux<DataBuffer> dataBufferFlux) throws IOException {
    AsynchronousFileChannel asynchronousFileChannel = AsynchronousFileChannel.open(path, CREATE, WRITE);
    DataBufferUtils.write(dataBufferFlux, asynchronousFileChannel)
            .doOnNext(DataBufferUtils.releaseConsumer())
            .doAfterTerminate(() -> {
                try {
                    asynchronousFileChannel.close();
                } catch (IOException ignored) { }
            }).then();
}

如果我尝试使用

代码语言:javascript
复制
DataBufferUtils.write(dataBufferFlux, path, StandardOpenOption.CREATE).block();

而不是调用saveFileOnServer(..)方法,一切都很好。但我想确切地使用AsynchronousFileChannel。

EN

回答 1

Stack Overflow用户

发布于 2021-04-28 01:57:39

好吧,我想我把它修好了。

代码语言:javascript
复制
private void saveFileOnServer(Path path, Flux<DataBuffer> dataBufferFlux) throws IOException {
    AsynchronousFileChannel asynchronousFileChannel = AsynchronousFileChannel.open(path, CREATE, WRITE);
    DataBufferUtils.write(dataBufferFlux, asynchronousFileChannel).subscribe();
}

官方documentation说:“请注意,直到订阅了返回的Flux,写入过程才会开始”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67285154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档