gpt4 book ai didi

azure - 使用azure java sdk v12.0.6的List Blob和BeginCopy异步的最佳方法

转载 作者:行者123 更新时间:2023-12-03 04:02:51 24 4
gpt4 key购买 nike

要求:我想列出容器中的 blob,然后使用 azure java sdk 版本 12.0.6 将其复制到其他存储帐户。

我在 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();
});

如何获取所有复制状态的结果?

最佳答案

关于该问题,请引用以下代码

 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));


});

关于azure - 使用azure java sdk v12.0.6的List Blob和BeginCopy异步的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61440796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com