gpt4 book ai didi

c# - 尽管容器、路径和 uri 正确,Azure 存储 Blob GetBlobs 方法仍失败

转载 作者:行者123 更新时间:2023-12-03 05:13:47 27 4
gpt4 key购买 nike

为此,我使用 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 页面代码后面),然后错误发生在我迭代集合以构建图像标签的页面中。

该方法生成一个有效的容器

container as text

您可以将下面的网址粘贴到浏览器中,它就会下载。//https://enerteckchemical.blob.core.windows.net/enerteck/publicfiles/images/robsonpty/RobsonCivil_CatR475_CrawlerDozer.jpg

并且该容器中的图像是可检索的(它们是公共(public)的)

one test image from the container

感谢任何帮助。

最佳答案

请对您的代码进行 2 处更改:

  1. 更改以下代码行:
var containerClient = new BlobContainerClient(ConnectionSettings.PrimaryConnection,
$"enerteck/publicfiles/images/{customer.AzureFolderName}/");

var containerClient = new BlobContainerClient(ConnectionSettings.PrimaryConnection,
"enerteck");

因为您的 Blob 容器的名称是 enerteck。之后的所有内容都是 blob 前缀。

  • 通过更改以下代码行将 blob 前缀添加到 GetBlobsAsync 调用:
  • await foreach (var blob in containerClient.GetBlobsAsync())

    await foreach (var blob in containerClient.GetBlobsAsync(prefix: $"publicfiles/images/{customer.AzureFolderName}/"));

    以便您从名为 publicfiles/images/{customer.AzureFolderName} 的虚拟文件夹中获取 Blob。

    更新

    这是我运行的代码,效果很好:

    var connectionString =
    "DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=account-key;EndpointSuffix=core.windows.net;";

    var containerName = "enerteck";
    var prefix = "publicfiles/images/robsonpty/";

    var containerClient = new BlobContainerClient(connectionString,
    containerName);

    await foreach (var blob in containerClient.GetBlobsAsync(prefix: prefix))
    {
    Console.WriteLine(blob.Name);
    }

    关于c# - 尽管容器、路径和 uri 正确,Azure 存储 Blob GetBlobs 方法仍失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75539796/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com