我正在尝试将许多容器从一个Azure blob存储帐户复制到另一个blob存储帐户。
我正在使用Microsoft.WindowsAzure.Storage.DataMovement
库来使用C#和TransferManager.CopyDirectoryAsync
方法。
我发现所有容器都没有问题,但是当我尝试复制容器时,我没有得到有关已复制的blob的反馈。我想复制数以百万计的blob,所以我希望在完成时提供反馈。我正在使用异步服务器端副本,I.E。 isServiceCopy = true
我正在打电话
return await TransferManager.CopyDirectoryAsync(sourceDirectory,
destinationDirectory, true, options, null).ConfigureAwait(false);
因为我在等待,所以我希望在复制完成之前不要从此行传递。但它几乎立即通过,如果我检查NumberOfFilesTransferred
结果上的TransferStatus
,它始终是0
。即使我在while循环中重复检查结果,此数字也不会从0
更改。但是,如果我签入Azure门户,则所有预期的文件都已成功复制。
我还尝试在ProgressHandler
上设置DirectoryTransferContext
,并且它会被调用几次,但所有属性都是0
。
有谁知道为什么我没有从副本中得到任何反馈?
提前致谢。克里斯
答案 0 :(得分:1)
这是不正确的:
CloudBlobDirectory sourceDirectory = sourceContainer.GetDirectoryReference(".");
CloudBlobDirectory destinationDirectory = destinationContainer.GetDirectoryReference(".");
请注意,Azure Blob存储没有真正的文件夹层次结构,此处的参数实际上是blob容器中blob的前缀。因此,请将代码更改为:
CloudBlobDirectory sourceDirectory = sourceContainer.GetDirectoryReference(string.Empty);
CloudBlobDirectory destinationDirectory = destinationContainer.GetDirectoryReference(string.Empty);
答案 1 :(得分:0)
您可以轮询blob的CopyState。有关详细信息,请参阅https://stackoverflow.com/a/42255582