复制时是否可以强制在新blob上覆盖azure blob元数据



所以我正在复制一个blobblob,并用以下代码覆盖另一个blobnewBlob

CopyStatus copy = CopyStatus.Pending;
while (copy != CopyStatus.Success)
{
newBlob.StartCopyFromBlob(blob);
copy = manager.CheckIsDoneCopying(newBlob, container.Name);
}

newBlob在复制之前就已经有了元数据,从这里我可以看到:

如果未指定名称-值对,则操作将复制源blob元数据到目标blob。如果一个或多个指定名称值对,则使用创建目标blob指定的元数据,并且元数据不是从源复制的斑点。

我收集到这意味着旧的Blob元数据将不会被复制。我想强制原始blob覆盖newBlob's元数据,然后使用以下内容编辑新blob元数据:

newBlob.FetchAttributes();
if (newBlob.Metadata.ContainsKey(StorageManager.IsLive))
{
newBlob.Metadata[StorageManager.IsLive] = "Y";
}
else
{
newBlob.Metadata.Add(new KeyValuePair<string, string>(StorageManager.IsLive, "Y"));
}
if (newBlob.Metadata.ContainsKey(StorageManager.LastUploadedTime))
{
newBlob.Metadata[StorageManager.LastUploadedTime] = uploadedTime.Ticks.ToString();
}
else
{
newBlob.Metadata.Add(new KeyValuePair<string, string>(StorageManager.LastUploadedTime, uploadedTime.Ticks.ToString()));
}

是否可以强制覆盖旧blob中的newblobs元数据?

编辑

如果我在代码中添加一行:

CopyStatus copy = CopyStatus.Pending;
newBlob.Metadata.Clear();
while (copy != CopyStatus.Success)
{...

元数据被复制。虽然这不是复制操作失败或永远不会完成的唯一方式,但这意味着我有一个无效的newBlob。一定有比这更好的方法吗?

否,调用newBlob。元数据。在执行newBlob之前清除()。StartCopyFromBlob(blob)并不意味着在服务器端清除newBlob的元数据,然后开始异步blob复制。需要明确的是,newBlob。元数据。除非调用newBlob,否则Clear()不会触发对服务器的实际请求。然后设置元数据()。

实际上,正在调用newBlob。元数据。在执行newBlob之前清除()。StartCopyFromBlob(blob)的意思正是"在CopyBlob请求中不指定任何键值对",您在MSDN网页上看到的内容提到了这一点。

因此,您的解决方案正是您所期望的完美解决方案,请再次验证!:)

最新更新