所以我使用以下代码复制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。必须有比这更好的方法吗?
答案 0 :(得分:1)
不,在执行newBlob.StartCopyFromBlob(blob)之前调用newBlob.Metadata.Clear()并不意味着在服务器端清除newBlob的元数据,然后以异步方式启动blob复制。要明确的是,newBlob.Metadata.Clear()不会触发对服务器的实际请求,除非您之后调用newBlob.SetMetadata()。
实际上,在执行newBlob.StartCopyFromBlob(blob)之前调用newBlob.Metadata.Clear()正好意味着“不在CopyBlob请求中指定任何键值对”,这是您从MSDN网页上看到的内容所提到的。
因此,您的解决方案正如您所期望的那样完美,请再次验证! :)