【问题标题】:Trouble Upgrading from Azure Storage 1.7 to 2.0从 Azure 存储 1.7 升级到 2.0 时遇到问题
【发布时间】:2014-08-14 23:33:11
【问题描述】:

我目前正在参与从 Azure 1.7 升级到 2.2 的工作,并且遇到了存储方面的重大更改。库中的所有存储调用都包含在单元测试中,并且我已经解决了大部分更改。

我完全被我们的一个核心方法所困扰,它获取目录中的子目录列表。我知道它们不是实际的目录,而是 blob 名称的一部分,但该功能在 2.0 之前就存在,我们在近 30 种不同的服务中大量使用它。

存储 blob 地址是 testdata/test/test1/blob.txt

还有测试

/// Unit Test
[Test]
public void BuildDirectoryAndRetrieveUsingSubDirectory()
{
  CloudBlobDirectory subDirectory = GetBlobDirectory("testdata/test/");
  IEnumerable<CloudBlobDirectory> dirs = 
    subDirectory.ListBlobs().OfType<CloudBlobDirectory>();
  Assert.AreEqual(1, dirs.Count());
}

GetBlobDirectory 的旧 1.7 代码返回 testdata/test/ 中每个目录 blob 的列表,因此在这种情况下将返回 test1

/// Azure Storage 1.7
public static CloudBlobDirectory GetBlobDirectory(string directoryReference)
{
  return BlobClient.GetBlobDirectoryReference(directoryReference);
}

我曾尝试使用 2.0 获得相同的结果,但徒劳无功

/// Azure Storage 2.0
public static CloudBlobDirectory GetBlobDirectory(string directoryReference)
{
  string containerName = GetContainerNameFromDirectoryName(directoryReference);
  CloudBlobContainer container = BlobClient.GetContainerReference(containerName);
  return container.GetBlobDirectoryReference(directoryReference);
}

然而,在测试中,dirs 只返回“枚举未产生任何结果”。

任何人都可以帮忙 - 我非常希望单独留下测试代码,但从方法返回相同的结果。

谢谢

【问题讨论】:

    标签: azure azure-storage azure-blob-storage


    【解决方案1】:

    找到了答案,这出奇的简单。

    在 StorageClient 1.7 中,您传入的前缀值包括容器名称,并且必须以“/”结尾。

    所以基本上containerName变成了“testdata”,directoryPrefix变成了“test”。

    在最新版本中,前缀值是不包括容器名称的任何内容,因此函数已更改为

    public static CloudBlobDirectory GetBlobDirectory(string directoryReference)
    {
        string containerName = GetContainerNameFromDirectoryName(directoryReference);
        string directoryPrefix = GetPrefixFormDirectoryName(directoryReference);
        CloudBlobContainer container = BlobClient.GetContainerReference(containerName);
        var blobs = container.ListBlobs(directoryPrefix, false);
        return (CloudBlobDirectory)blobs.Where(b => b as CloudBlobDirectory !=null).First();
    }
    

    【讨论】:

    • GetContainerNameFromDirectoryNameGetPrefixFormDirectoryName 只是使用子字符串获取容器名称和目录前缀的方法吗?
    猜你喜欢
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    相关资源
    最近更新 更多