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

如何使用Java/REST将Azure blob从一个存储容器移动到另一个存储容器?,java,azure,powershell,blob,Java,Azure,Powershell,Blob,有人能帮忙吗?我在关注JavaJDK示例,有很多关于如何管理容器和blob的示例,但是没有说明如何从一个存储容器移动到另一个存储容器 例如,我在StorageOne/ContainerOne/BlobName上有一个blob需要移动到Storage2/ContainerTwo/BlobName 我在看这个网站,但运气不好 此外,我还设法通过ConnectionString连接并创建、下载Blob,但我不知道如何移动 任何建议都会有帮助。我也曾尝试在Azure中创建应用程序功能来实现这一点,但我的

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

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

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

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

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


谢谢

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

如果需要示例,可以参考此github示例:

如果您想将一个blob从源容器移动到另一个容器,但它在源容器中不存在,因为现在还没有直接的方法来实现,您可以先复制blob,在复制活动之后,然后使用方法删除源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);

        }
String connectStr=“存储帐户连接字符串”;
//创建一个BlobServiceClient对象,该对象将用于创建容器客户端
BlobServiceClient BlobServiceClient=new BlobServiceClientBuilder().connectionString(connectStr.buildClient();
BlobContainerClient containerClient=blobServiceClient.getBlobContainerClient(“测试”);
BlobContainerClient destcontainer=blobServiceClient.getBlobContainerClient(“testcontainer”);
PagedTerable blobs=containerClient.listBlobs();
用于(BlobItem BlobItem:blobs){
System.out.println(“这是blob名称:”+blobItem.getName());
BlobClient BlobClient=containerClient.getBlobClient(blobItem.getName());
BlobServiceSasSignatureValues sas=新的BlobServiceSasSignatureValues(OffsetDateTime.now().plusHours(1),
BlobContainerSasPermission.parse(“r”);
字符串sasToken=blobClient.generateSas(sas);
BlobClient destblobclient=destcontainer.getBlobClient(blobItem.getName());
destblobclient.beginCopy(blobClient.getBlobUrl()+“?”+sasToken,null);
}

更新

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

        }
String connectStr=“源存储帐户连接字符串”;
String destconnectStr=“目标存储帐户连接字符串”;
//创建一个BlobServiceClient对象,该对象将用于创建容器客户端
BlobServiceClient BlobServiceClient=new BlobServiceClientBuilder().connectionString(connectStr.buildClient();
BlobServiceClient destblobServiceClient=new BlobServiceClientBuilder().connectionString(destconnectStr.buildClient();
BlobContainerClient containerClient=blobServiceClient.getBlobContainerClient(“测试”);
BlobContainerClient destcontainer=destblobServiceClient.getBlobContainerClient(“destcontainer”);
PagedTerable blobs=containerClient.listBlobs();
用于(BlobItem BlobItem:blobs){
System.out.println(“这是blob名称:”+blobItem.getName());
BlobClient BlobClient=containerClient.getBlobClient(blobItem.getName());
BlobClient destblobclient=destcontainer.getBlobClient(blobItem.getName());
destblobclient.beginCopy(blobClient.getBlobUrl(),null);
}

现在有任何处理吗?@Wil Ferraciolli,我已经更新了我的答案,请检查。感谢您的帮助,这太棒了,但是它只能在同一个存储中工作,我在尝试从不同的存储帐户时遇到404 CannotVerifyCopySource错误。@Wil Ferraciolli,我用两个存储帐户测试它可以工作。您使用sas令牌了吗?也许你可以分享你的代码,我会更新我的工作代码。如果这对你有帮助,你可以接受它作为答案。谢谢如果你还有问题,请随时告诉我。谢谢你的帮助,我现在已经设法让它工作了。我已将sas令牌添加到源Url BlobServiceSasSignatureValues sas=new BlobServiceSasSignatureValues(OffsetDateTime.now().plusHours(1),BlobContainerSasPermission.parse(“r”);字符串sasToken=sourceBlobClient.generateSas(sas);