提问人:Vicente Montoro 提问时间:10/25/2023 更新时间:10/26/2023 访问量:41
Azure 存档层覆盖文件 [Java]
Azure Archive tier overwrite files [Java]
问:
我正在测试覆盖 Azure 上存档层存储的任何文件,但出现下一个错误(其他层没有问题):
错误:文件上传失败 com.azure.storage.blob.models.BlobStorageException:BlobArchived
我用来复制文件的方法是:
blob.uploadWithResponse(..);或者 blob.uploadFromFile(..);
目前有没有一种简单的方法可以避免此问题并覆盖文件,或者存档层文件无法覆盖?我手动测试(从 Azure 存储),它询问你是否覆盖数据。也许 Java 中有一些方法可以做到这一点,但我找不到它。
提前致谢!
我试图找到一种方法来覆盖 Java 中存档层文件的数据
答:
0赞
Pravallika KV
10/26/2023
#1
当 blob 位于 中时,它被设置为 并且不能被读取或修改。因此,无法覆盖存档层中的 Blob。Archive tier
offline
若要覆盖 Blob,必须确保 blob 处于联机状态且未设置为“存档”。
这可以通过两种方式使用补液来实现:
方法1:
- 将存档的 blob 复制到位于 using .
Hot or Cool tier
the Copy Blob operation
- 将存档的 blob 复制到联机层中的新 blob 时,源 blob 在存档层中保持不变。
- 将 blob 复制到联机层后,可以根据需要覆盖它。
方法2:
- 使用操作将 Blob 的层从 更改为 。
archive
hot or cool
Set Blob Tier
我在存档层中有一个 Blob:I have a Blob in Archive tier:
- 为了解除冻结存档层 Blob,我使用了@Venkatesan从 SO 中获取的以下代码片段:
String sourceConnectionString = "<Source_storage_Connection_string>";
String destConnectionString = "<destination_storage_connection_string>";
String sourceContainerName = "<source_container_name>";//demo
String destContainerName = "<destination_container_name>";//demo
String sourceBlobName = "<your_source_blob_name>";//demoblob/Blob.txt
String destBlobName = "<destination>";//demo.txt
BlobClient sourceBlobClient = new BlobServiceClientBuilder().connectionString(sourceConnectionString)
.buildClient().getBlobContainerClient(sourceContainerName).getBlobClient(sourceBlobName);
BlobClient destBlobClient = new BlobServiceClientBuilder().connectionString(destConnectionString)
.buildClient().getBlobContainerClient(destContainerName).getBlobClient(destBlobName);
// Generating SAS token
OffsetDateTime sasExpiry = OffsetDateTime.now().plusMinutes(1);
BlobSasPermission permission = new BlobSasPermission().setReadPermission(true);
BlobServiceSasSignatureValues sas = new BlobServiceSasSignatureValues(sasExpiry, permission);
String sourceURL = sourceBlobClient.getBlobUrl() + "?" + sourceBlobClient.generateSas(sas);
Map<String, String> metadata = new HashMap<>();
metadata.put("key", "value");
// Performing blob copy with rehydration
destBlobClient.beginCopy(sourceURL, metadata, AccessTier.COOL, RehydratePriority.HIGH, null, null, null);
System.out.println("Blob copy operation is initiated with rehydration.");
输出:
- 使用冷层创建的 Blob 的副本:A copy of the Blob created with
Cool tier
:
- 可以使用冷层覆盖新生成的 Blob。
引用:
存档层中的 Blob 解除冻结 |Microsoft Learn:将存档的 Blob 解除冻结到联机层 - Azure 存储 |Microsoft 学习
评论