Как переместить Azure BLOB-объектов из одного хранилища в другой, используя Java / REST? - PullRequest
0 голосов
/ 09 апреля 2020

Может кто-нибудь помочь с этим, пожалуйста? Я следую за примерами Java JDK, есть много примеров того, как управлять контейнерами и BLOB-объектами, однако ничего не говорится о том, как перейти из одного контейнера хранения в другой.

Например, у меня есть блоб в StorageOne / ContainerOne / BlobName необходимо переместить в Storage2 / ContainerTwo / BlobName

Я смотрю на этом сайте https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/storage/azure-storage-blob/README.md Но мне не повезло.

Также мне удалось подключайтесь через ConnectionString и создавайте, скачивайте большие двоичные объекты, но не можете понять, как их перемещать.

Любое предложение будет полезным. Я также пытался создать функцию приложения в Azure для этого, но мои навыки PowerShell не очень хороши.

Спасибо

1 Ответ

1 голос
/ 10 апреля 2020

Если вы хотите скопировать большой двоичный объект из одного контейнера хранения в другой контейнер хранения, вы можете использовать метод beginCopy , сначала получить исходный URL-адрес большого двоичного объекта с помощью метода getBlobUrl , а затем передать его.

Если вы хотите образец, вы можете обратиться к этому примеру github: BlobAsyncClientBaseJavaDocCodeSnippets .

И если вы хотите переместить один большой двоичный объект из исходного контейнера в другой контейнер, и это не не существует в исходном контейнере, так как сейчас нет прямого метода для реализации, вы можете сначала скопировать большой двоичный объект, после операции копирования затем удалить исходный большой двоичный объект с помощью метода delete .

Фактически из всех эти ссылки на методы, которые вы можете найти, все они предоставляют пример github, просто следуйте структуре проекта.

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

        String connectStr = "storage account connection string";

        // Create a BlobServiceClient object which will be used to create a container client
        BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(connectStr).buildClient();

        BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient("test");

        BlobContainerClient destcontainer=blobServiceClient.getBlobContainerClient("testcontainer");

        PagedIterable<BlobItem> blobs= containerClient.listBlobs();
        for (BlobItem blobItem : blobs) {

            System.out.println("This is the blob name: " + blobItem.getName());
            BlobClient blobClient=containerClient.getBlobClient(blobItem.getName());
BlobServiceSasSignatureValues sas = new BlobServiceSasSignatureValues(OffsetDateTime.now().plusHours(1),
                BlobContainerSasPermission.parse("r"));
        String sasToken = blobClient.generateSas(sas);

            BlobClient destblobclient=destcontainer.getBlobClient(blobItem.getName());
            destblobclient.beginCopy(blobClient.getBlobUrl()+ "?" + sasToken,null);

        }

enter image description here

Обновление :

        String connectStr = "source storage account connection string";

        String destconnectStr="destination storage account connection string";



        // Create a BlobServiceClient object which will be used to create a container client
        BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(connectStr).buildClient();

        BlobServiceClient destblobServiceClient = new BlobServiceClientBuilder().connectionString(destconnectStr).buildClient();

        BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient("test");

        BlobContainerClient destcontainer=destblobServiceClient.getBlobContainerClient("destcontainer");

        PagedIterable<BlobItem> blobs= containerClient.listBlobs();
        for (BlobItem blobItem : blobs) {

            System.out.println("This is the blob name: " + blobItem.getName());
            BlobClient blobClient=containerClient.getBlobClient(blobItem.getName());
            BlobClient destblobclient=destcontainer.getBlobClient(blobItem.getName());
            destblobclient.beginCopy(blobClient.getBlobUrl(),null);

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