Spring WebClient下载图像

时间:2019-07-12 00:30:24

标签: java reactive-programming spring-webflux

我一直在研究Reactive Programming,最近尝试用Spring WebFlux构建POC。我想从简单开始,仅使用WebClient下载图像;特别是https://greatatmosphere.files.wordpress.com/2013/02/great-atmosphere-149-tenaya-lake-yosemite-national-park-2.jpg

我尝试了以下代码

    String block = WebClient.create("https://greatatmosphere.files.wordpress.com/2013/02/great-atmosphere-149-tenaya-lake-yosemite-national-park-2.jpg")
            .get()
            .accept(MediaType.IMAGE_JPEG)
            .retrieve()
            .bodyToMono(String.class)
            .doOnError(WebClientResponseException.class,
                    ex -> System.out.println(ex.getStatusCode() + ": " + ex.getResponseBodyAsString()))
            .log()
            .block();
    System.out.println("output:" + block);

,但无法正常工作。似乎数据一直在被流式传输,并且get请求不会终止。

我可以肯定我缺少一些简单的东西,但是似乎无法弄清楚。我尝试了各种参数,但结果是相同的。

如何使用WebClient下载图像然后终止?

1 个答案:

答案 0 :(得分:0)

将图像捕获为byte[]而不是String

byte[] image = WebClient.create("https://greatatmosphere.files.wordpress.com/2013/02/great-atmosphere-149-tenaya-lake-yosemite-national-park-2.jpg")
        .get()
        .accept(MediaType.IMAGE_JPEG)
        .retrieve()
        .bodyToMono(byte[].class)
        .block();