You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure跨存储账户Blob复制时Rehydrate操作异常问题(Java)

跨区域Azure Blob复制+重新水化(Rehydration)异常:仅复制元数据,无实际内容

问题场景

尝试将归档层Blob从一个Azure存储账户跨账户复制到另一个账户时,调用beginCopy并设置了从Archive到Cool层的重新水化选项及优先级,操作执行后目标Blob大小为0B,仅复制了元数据,无重新水化等待过程,也未同步Blob内容。同一账户内跨容器复制该归档Blob正常,跨账户复制非归档层Blob也正常。

涉及代码片段

创建源/目标Blob客户端

BlobClient blobMeta = sourceClient.getBlobContainerClient(source.getContainer()).getBlobClient(key);
BlobClient destObject = destClient.getBlobContainerClient(dest.getContainer()).getBlobClient(key);

生成源Blob的SAS令牌(跨账户复制要求)

OffsetDateTime sasExpiry = OffsetDateTime.now().plusMinutes(1);
BlobSasPermission permission = new BlobSasPermission().setReadPermission(true);
BlobServiceSasSignatureValues sas = new BlobServiceSasSignatureValues(sasExpiry,permission).setStartTime(OffsetDateTime.now());
String sourceURL = blobMeta.getBlobUrl() + "?" + blobMeta.generateSas(sas);

调用跨账户复制+重新水化操作

destObject.beginCopy(sourceURL, blobMeta.getProperties().getMetadata(), AccessTier.COOL, RehydratePriority.STANDARD, null, null, null);

问题根因

两个存储账户处于不同区域,当前Azure存储不支持跨区域场景下,在beginCopy操作中同时指定重新水化(Rehydration)参数。这类操作会被降级为仅复制元数据,不会触发源Blob的重新水化流程,也不会同步实际内容。

解决方案

分两步执行操作:

  1. 先将源归档层Blob重新水化到Cool或Hot访问层(使用setAccessTier操作,指定目标层和重新水化优先级)
  2. 待源Blob完成重新水化后,再执行跨账户的beginCopy操作(无需再携带重新水化参数,直接复制已处于Cool/Hot层的Blob)

内容的提问来源于stack exchange,提问作者Vicente Montoro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:55:07