如果要将 blob 从一个存储容器复制到另一存储容器,可以使用开始复制 https://learn.microsoft.com/en-us/java/api/com.azure.storage.blob.specialized.blobasyncclientbase.begincopy?view=azure-java-stable方法,首先获取源 blob url获取BlobUrl https://learn.microsoft.com/en-us/java/api/com.azure.storage.blob.specialized.blobasyncclientbase.getbloburl?view=azure-java-stable方法然后通过它。
如果你想要示例,可以参考这个 github 示例:BlobAsyncClientBaseJavaDocCodeSnippets https://github.com/Azure/azure-sdk-for-java/blob/ffa0c09f48540f438d66eece605fd26bce04075f/sdk/storage/azure-storage-blob/src/samples/java/com/azure/storage/blob/specialized/BlobAsyncClientBaseJavaDocCodeSnippets.java#L62.
如果你想将一个 blob 从源容器移动到另一个容器,并且它不存在于源容器中,目前没有直接的方法可以实现,你可以先复制该 blob,在复制活动之后然后删除源 blobdelete https://learn.microsoft.com/en-us/java/api/com.azure.storage.blob.specialized.blobasyncclientbase.delete?view=azure-java-stable method.
实际上从所有这些方法链接中你可以发现它们都提供了 github 示例,只需遵循项目结构即可。
Update:如果你想要示例代码,你可以参考我下面的代码,我已经测试过它可以工作。
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);
}
Update:
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);
}