Лучший способ использовать List Blob и BeginCopy asyn c из azure java sdk v12.0.6 - PullRequest
0 голосов
/ 26 апреля 2020

Требование: я хочу вывести список больших двоичных объектов из контейнера, а затем скопировать их в другую учетную запись хранения, используя azure java SDK версии 12.0.6.

Я столкнулся с той же проблемой с методами listBlob и beginCopy. Поскольку я также использую asyn c клиент, приложение весенней загрузки запускается и завершается, но я не получаю никакого значения в listBlob из контейнера.

Я добавил обратные вызовы onSuccess или OnCompletion, но это не решает мою проблему? Я не хочу использовать клиенты syn c, потому что я хочу копировать несколько файлов одновременно, поэтому не хочу блокировать эти операции.

Я не хочу добавлять System.readline () или Thread .Sleep () или foreach. Может ли какой-то другой способ помочь мне?

Мне также нужен список всех копий и их статус. Таким образом, используя BlobCopyInfo, мы можем это сделать. Но это тоже пусто.

Каков наилучший способ выполнения этих асин c операций?

Так я перечисляю 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();
});

Как я могу получить все результаты статуса копирования?

1 Ответ

0 голосов
/ 27 апреля 2020

Что касается вопроса, пожалуйста, обратитесь к следующему коду

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


        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...