从Azure存储1.7升级到2.0时出现问题
我目前正参与从Azure 1.7升级到2.2的过程,在存储方面遇到了突破性的变化。库中的所有存储调用都包含在单元测试中,我已经完成了大部分更改 我完全被我们的一个核心方法卡住了,它在一个目录中获得一个子目录列表。我知道它们不是实际的目录,而是blob名称的一部分,但功能在2.0之前就存在,我们在近30个不同的服务中大量使用了它 存储blob地址为 testdata/test/test1/blob.txt 测试呢从Azure存储1.7升级到2.0时出现问题,azure,azure-storage,azure-storage-blobs,Azure,Azure Storage,Azure Storage Blobs,我目前正参与从Azure 1.7升级到2.2的过程,在存储方面遇到了突破性的变化。库中的所有存储调用都包含在单元测试中,我已经完成了大部分更改 我完全被我们的一个核心方法卡住了,它在一个目录中获得一个子目录列表。我知道它们不是实际的目录,而是blob名称的一部分,但功能在2.0之前就存在,我们在近30个不同的服务中大量使用了它 存储blob地址为 testdata/test/test1/blob.txt 测试呢 /// Unit Test [Test] public void BuildDire
/// Unit Test
[Test]
public void BuildDirectoryAndRetrieveUsingSubDirectory()
{
CloudBlobDirectory subDirectory = GetBlobDirectory("testdata/test/");
IEnumerable<CloudBlobDirectory> dirs =
subDirectory.ListBlobs().OfType<CloudBlobDirectory>();
Assert.AreEqual(1, dirs.Count());
}
我试图通过使用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只返回“枚举未产生任何结果”
有人能帮忙吗?我非常想让测试代码不受影响,但从方法返回相同的结果
谢谢找到了答案,答案出人意料地简单 在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();
}
GetContainerNameFromDirectoryName
和GetPrefixFormDirectoryName
是否只是使用子字符串获取容器名称和目录前缀的方法?
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();
}