【问题标题】:Is it possible to force azure blob metadata to be overwritten on new blob when copying复制时是否可以强制将 azure blob 元数据覆盖在新 blob 上
【发布时间】:2015-07-01 09:40:59
【问题描述】:

所以我正在复制一个 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 中的新 blob 元数据?

编辑

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-04-16
      • 2015-05-06
      • 2016-02-12
      • 2014-04-13
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 2015-07-16
      • 2020-09-27
      相关资源
      最近更新 更多