我正在使用Azure.Storage.Blobs 12.14版本...因为旧的SDK正在被弃用,我们的存储服务代码需要更新。
下面的代码与Microsoft文档教程匹配,失败但不会导致异常。它只是福尔斯到调用方,并导致“对象引用未设置为对象的示例"。
下面是一种方法(根据Guarav的建议进行了更新)
public async Task<List<EvaluationImage>> GetImagesFromVirtualFolder(CompanyDataDto? customer)
{
var images = new List<EvaluationImage>();
var imageFolderPrefix = $"publicfiles/images/{customer.AzureFolderName}/";
var containerClient = new BlobContainerClient(ConnectionSettings.PrimaryConnection,
ContainerSettings.MainAppContainer);
try
{
await foreach (var blob in containerClient.GetBlobsAsync(prefix: imageFolderPrefix))
{
var filename = blob.Name;
var img = new EvaluationImage
{
ImageUrl = $"{containerClient.Uri.AbsoluteUri}/{filename}",
ImageCaption = GetCaptionFromFilename(filename),
IsPosterImage = filename.Contains("poster"),
ImagesForCompany = customer.CompanyName
};
}
}
catch (RequestFailedException ex)
{
Log.Logger.Error(ex.Message);
throw;
}
return images;
}
当代码在foreach循环中时,它会在任何迭代完成之前退出,并由调用者(后面的razor页面代码)处理,然后在我迭代集合以构建图像标记的页面中发生错误。
该方法生成有效的容器
您可以将下面的url粘贴到浏览器中,它将被下载。https://enerteckchemical.blob.core.windows.net/enerteck/publicfiles/images/robsonpty/RobsonCivil_CatR475_CrawlerDozer.jpg
并且该容器中的图像是可检索的(它们是公共的)
one test image from the container
任何帮助都感激不尽。
1条答案
按热度按时间rxztt3cl1#
请对您的代码进行2项更改:
1.更改以下代码行:
到
因为你的blob容器的名字是
enerteck
,后面的都是blob前缀。1.通过更改以下代码行将blob前缀添加到
GetBlobsAsync
调用:到
这样您就可以从名为
publicfiles/images/{customer.AzureFolderName}
的虚拟文件夹中获取blob。下面是我运行的代码,工作得很好: