使用 azure java sdk v12.0.6 的 List Blob 和 BeginCopy async 的最佳方法。

问题描述 投票:0回答:1

需求:我想使用 azure java sdk 12.0.6 版本从容器中列出 blobs,然后将其复制到其他存储账户。

我在listBlob和beginCopy方法上面临同样的问题。由于我也在使用异步客户端,spring boot应用程序运行并完成,但我没有从容器中获取任何listBlob的值。

我已经添加了onSuccess或OnCompletion回调,但这并不能解决我的问题。我不想使用同步客户端,因为我想一次复制多个文件,所以不想阻止这些操作。

我不想添加System.readline()或Thread.Sleep()或foreach。有没有其他方法可以帮助我?

我还想知道所有复制的blob的列表和它的状态。所以通过使用BlobCopyInfo我们可以做到这一点。但这也是空的。

做这些异步操作的最好方法是什么?

我就是这样列出blob的,并且在里面添加了beginCopy方法。

    container.listBlobs(options).subscribe(x -> {
    BlobAsyncClient desblobClient = destinationContainer.getBlobAsyncClient("test");
    desblobClient.copyFromUrl(sourceUrl.toString()).doOnSuccess(response -> 
    doSuccess(response)).doOnError(error -> fail.add("error")).subscribe();
});

我怎样才能得到所有复制状态的结果?

azure azure-storage-blobs azure-java-sdk
1个回答
0
投票

关于这个问题,请参考以下代码。

 BlobContainerAsyncClient sourceClient = new BlobContainerClientBuilder()
                .connectionString("")
                .containerName("test")
                .buildAsyncClient();

        BlobContainerAsyncClient desblobClient  = new BlobContainerClientBuilder()
                .connectionString("")
                 .containerName("test1")
                .buildAsyncClient();

        sourceClient.listBlobs().subscribe(blob -> {    

            BlobAsyncClient client =sourceClient.getBlobAsyncClient( blob.getName());
            BlobServiceSasSignatureValues sas = new BlobServiceSasSignatureValues(OffsetDateTime.now().plusHours(1),
                    BlobContainerSasPermission.parse("r"));
            String sasToken = client.generateSas(sas);
            String url= client.getBlobUrl()+"?"+sasToken.toString();
             BlobAsyncClient client1 =desblobClient  .getBlobAsyncClient( blob.getName());
            client1.beginCopy(url, Duration.ofSeconds(3))
                    .subscribe(response -> System.out.printf("Copy identifier: %s%n", response));


        });
© www.soinside.com 2019 - 2024. All rights reserved.