Azure CloudBlobDirectory子目录

时间:2015-09-22 11:06:18

标签: azure azure-storage azure-storage-blobs

我们有一个由离岸外包开发公司开发的旧应用程序,它仍在使用Azure存储客户端1.7。

因此我会在此版本停止工作之前更新它。

我无法通过单元测试。

    [TestMethod()]
    public void CloudBlobDirectoryTest()
    {
        CloudBlobClient cloudBlobClient = _cloudStorageAccount.CreateCloudBlobClient(); 
        string filePath = "http://127.0.0.1:10000/devstoreaccount1/store1/BCAUK_Reports.sql"; 
        string expected = "store1"; 
        CloudBlobDirectory actual = AzureUtil.CloudBlobDirectory(cloudBlobClient, filePath);
        Assert.AreEqual(expected, actual.Container.Name);
    }

使用的方法如下:

    public static CloudBlobDirectory CloudBlobDirectory(CloudBlobClient cloudBlobClient, string filePath)
    {
        CloudBlobDirectory cloudBlobDirectory = cloudBlobClient.GetBlobDirectoryReference(filePath);
        return cloudBlobDirectory;
    }

我已经重构了这个以适应新的存储API:

    public static CloudBlobDirectory CloudBlobDirectory(CloudBlobClient cloudBlobClient, string filePath)
    {
        Uri path = new Uri(filePath);
        string relativePath = "/store1/";

        CloudBlobContainer container = cloudBlobClient.GetContainerReference(path.Segments[1]);
        CloudBlobDirectory cloudBlobDirectory = container.GetDirectoryReference(relativePath);

        return cloudBlobDirectory;
    }

我无法锻炼relativePath的值应该是什么以及如何以可重现的方式获得此值。

1 个答案:

答案 0 :(得分:3)

这是一段奇怪的代码片段。目录的使用方式对我来说并不合理,因为store1是一个容器而BCAUK_Reports.sql是一个blob - 即没有任何目录。此外,仿真器字符串的硬编码似乎很奇怪,因为这意味着此测试不会测试与您可能正在使用的实时服务相关的任何内容。我猜这些奇怪之处就是为什么这不能很好地移植。你能解释一下你打算做什么测试吗?

话虽这么说,如果我猜你正在尝试做什么,那就得到一个blob的父目录和容器。如果您只是执行类似CloudBlockBlob(filepath,client.Credentials)的操作,然后为blob的容器引用执行blob.Container,或者为blob的父目录执行blob.Parent。