如何使用 java api 将文件从一个 Blob 容器移动到另一个容器。
我正在使用来自微软的以下 SKD。
Gradle dependency: compile group: 'com.azure', name: 'azure-storage-blob', version: '12.8.0'
如何使用 java api 在 blob 存储之间移动文件。
最佳答案
BlobClientBase.beginCopy方法用于将源 URL 处的数据复制到 blob。
代码示例:
如果容器位于不同的存储帐户中:
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 = "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);
}
BlobClientBase.copyFromUrl方法也可用于此目的,但它将等待复制完成后再返回响应。您可以选择您需要的内容。
关于azure - 如何使用java在azure blob容器之间移动文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64870147/