如何使用 Java/REST 将 Azure blob 从一个存储容器移动到另一个存储容器?
How to move Azure blob from one Storage container to another using Java/ REST?
有人可以帮忙吗?我正在关注 Java JDK 示例,其中有很多关于如何管理容器和 blob 的示例,但是没有说明如何从一个存储容器移动到另一个存储容器。
例如,我在 StorageOne/ContainerOne/BlobName 上有一个 blob 需要移动到 Storage2/ContainerTwo/BlobName
我正在查看这个网站 https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/storage/azure-storage-blob/README.md 运气不好。
我还设法通过 ConnectionString 连接并创建、下载 blob,但不知道如何移动。
任何建议都会有所帮助。我也尝试过在 Azure 中创建一个 App Function 来实现它,但是我的 powershell 技能并不好。
谢谢
如果你想将一个 blob 从一个存储容器复制到另一个存储容器,你可以使用 beginCopy method, firstly get the source blob url with getBlobUrl 方法然后传递它。
如果你想要一个示例,你可以参考这个 github 示例:BlobAsyncClientBaseJavaDocCodeSnippets.
而如果你想将一个blob从源容器移动到另一个容器并且它不存在于源容器中,目前没有直接的方法来实现,你可以先复制blob,然后复制activity 然后使用 delete 方法删除源 blob。
实际上从所有这些方法中 link 你可以发现它们都提供 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 = "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);
}
有人可以帮忙吗?我正在关注 Java JDK 示例,其中有很多关于如何管理容器和 blob 的示例,但是没有说明如何从一个存储容器移动到另一个存储容器。
例如,我在 StorageOne/ContainerOne/BlobName 上有一个 blob 需要移动到 Storage2/ContainerTwo/BlobName
我正在查看这个网站 https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/storage/azure-storage-blob/README.md 运气不好。
我还设法通过 ConnectionString 连接并创建、下载 blob,但不知道如何移动。
任何建议都会有所帮助。我也尝试过在 Azure 中创建一个 App Function 来实现它,但是我的 powershell 技能并不好。
谢谢
如果你想将一个 blob 从一个存储容器复制到另一个存储容器,你可以使用 beginCopy method, firstly get the source blob url with getBlobUrl 方法然后传递它。
如果你想要一个示例,你可以参考这个 github 示例:BlobAsyncClientBaseJavaDocCodeSnippets.
而如果你想将一个blob从源容器移动到另一个容器并且它不存在于源容器中,目前没有直接的方法来实现,你可以先复制blob,然后复制activity 然后使用 delete 方法删除源 blob。
实际上从所有这些方法中 link 你可以发现它们都提供 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 = "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);
}