Можно ли скопировать весь BLOB-объект контейнера (имеющий файлы) в другой BLOB-объект контейнера подписки в java - PullRequest
0 голосов
/ 12 апреля 2020

Я хочу скопировать данные из BLOB-объекта, например: storageaccount / container / folder1 / folder2 / folder3. Теперь я хочу скопировать данные folder3 в другой контейнер контейнера подписки.

Я использую java и azure sdk, startcopy для копирования источника в пункт назначения с помощью SAS. но каждый раз он говорит, что BLOB-объекта не существует.

Но если указать исходный путь, например: storageaccount / container / folder1 / folder2 / folder3 / xyz.txt, он может скопировать данные из источника в место назначения. Не можем ли мы скопировать целые данные folder3 в место назначения вместо циклического перебора всех файлов?

1 Ответ

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

Вы упомянули метод startcopy, предположим, вы используете v8 sdk. Когда вы используете storageaccount/container/folder1/folder2/folder3, вы говорите, что blob не существует, потому что вы просто предоставляете каталог, а startcopy нужен объект CloudBlockBlob.

Так что правильный путь должен быть перечислите BLOB-объекты в каталоге, затем l oop BLOB-объектов и скопируйте BLOB-объекты. Ниже приведен мой тестовый код, для теста я просто копирую каталог в другой контейнер.

        CloudStorageAccount storageAccount = CloudStorageAccount.parse(connectStr);
        CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
        try {
            CloudBlobContainer container = blobClient.getContainerReference("test");
            Iterable<ListBlobItem> blobs=container.listBlobs("testfolder/");
            CloudBlobContainer destcontainer=blobClient.getContainerReference("testcontainer");

            for(ListBlobItem blob:blobs){
                CloudBlockBlob srcblob=new CloudBlockBlob(blob.getUri());
                CloudBlockBlob destblob= destcontainer.getBlockBlobReference(srcblob.getName());
                destblob.startCopy(srcblob);

            }

        } catch (StorageException e) {
            e.printStackTrace();
        }

Обновление : о статусе действия копирования, есть метод getCopyState , вы можете получить данные о состоянии, надеюсь, это то, что вы хотите. Более подробно проверьте метод.

CopyState st=destblob.getCopyState();
System.out.println(st.getStatus());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...