复制

时间:2015-04-23 09:37:04

标签: c# azure metadata azure-storage-blobs

所以我使用以下代码复制blob blob并覆盖另一个blob newBlob

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

newBlob在复制之前已经有了元数据,而here我看到了:

  

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

我收集的

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

 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。必须有比这更好的方法吗?

1 个答案:

答案 0 :(得分:1)

不,在执行newBlob.StartCopyFromBlob(blob)之前调用newBlob.Metadata.Clear()并不意味着在服务器端清除newBlob的元数据,然后以异步方式启动blob复制。要明确的是,newBlob.Metadata.Clear()不会触发对服务器的实际请求,除非您之后调用newBlob.SetMetadata()。

实际上,在执行newBlob.StartCopyFromBlob(blob)之前调用newBlob.Metadata.Clear()正好意味着“不在CopyBlob请求中指定任何键值对”,这是您从MSDN网页上看到的内容所提到的。

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