需求:我想使用 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();
});
我怎样才能得到所有复制状态的结果?
关于这个问题,请参考以下代码。
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));
});