有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用Java/REST将Azure blob从一个存储容器移动到另一个存储容器?

有人能帮忙吗?我在关注JavaJDK示例,有很多关于如何管理容器和blob的示例,但是没有说明如何从一个存储容器移动到另一个存储容器

例如,我在StorageOne/ContainerOne/BlobName上有一个blob需要移动到Storage2/ContainerTwo/BlobName

我正在看这个网站,但运气不好

此外,我还设法通过ConnectionString连接并创建、下载Blob,但我不知道如何移动

任何建议都会有帮助。我也曾尝试在Azure中创建应用程序功能来实现这一点,但我的powershell技能并不好

多谢各位


共 (1) 个答案

  1. # 1 楼答案

    如果要将blob从一个存储容器复制到另一个存储容器,可以使用beginCopy方法,首先使用getBlobUrl方法获取源blob url,然后传递它

    如果您想要一个示例,可以参考这个github示例:BlobAsyncClientBaseJavaDocCodeSnippets

    如果您想将一个blob从源容器移动到另一个容器,而它在源容器中不存在,目前还没有直接的方法来实现,那么您可以先复制blob,在复制活动之后,然后使用delete方法删除源blob

    实际上,从所有这些方法链接中,您可以发现它们都提供了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);
    
            }