Как получить метаданные больших двоичных объектов в ASP.NET Core 2.1? Метод FetchAttributes выглядит как не реализованный - PullRequest
1 голос
/ 23 марта 2019

Я пытаюсь получить некоторые облачные объекты из хранилища BLOB-объектов Azure, и мне нужно получить доступ к их метаданным.При этом на .Net Standard Framework я могу использовать следующий метод:

blob.FetchAttributes()

Но, похоже, этот метод не реализован в .Net Core 2.1, и я не могу найти какой-либо эквивалентный метод вдокументы.

Хотите ли вы какой-нибудь обходной путь?

Вот код (работает на .Net Standard, но не работает на Core):

Dictionary<T, Uri> dic = new Dictionary<T, Uri>();

CloudBlobDirectory directory = container.GetDirectoryReference(cloudLink.BlobFolderName);

foreach (IListBlobItem blobItem in directory.ListBlobsSegmentedAsync(null).Result.Results)
{
    if (blobItem is CloudBlockBlob blob)
    {
        blob.FetchAttributes();

        if (blob.Metadata.ContainsKey(DefaultMetadataKey))
        {
            if (blob.Metadata.ContainsKey(DefaultMetadataKey))
                dic.Add(cloudLink.ReadMeta(blob.Metadata[DefaultMetadataKey]), blob.Uri);
        }
    }
}

Спасибо за вашу помощь!

1 Ответ

2 голосов
/ 25 марта 2019

Я думаю, что вы используете пакет nuget WindowsAzure.Storage, и в этом пакете нет синхронных методов для ядра dotnet, вы можете обратиться к этой проблеме github для получения более подробной информации.

Так что, если вы используете вышеуказанный пакет nuget, вы должны использовать метод Async, например FetchAttributesAsync вместо FetchAttributes.

Но теперь появился новый пакет nuget Microsoft.Azure.Storage.Blob , версия 9.4.2, и он поддерживает синхронные методы (например, FetchAttributes) для ядра dotnet.

Пожалуйста, используйте новый пакет, и пример кода с .net core 2.1 отлично работает на моей стороне.

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using System;

namespace ConsoleApp4netcore
{
    class Program
    {
        static void Main(string[] args)
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse("xxxxx");

            var blobClient = storageAccount.CreateCloudBlobClient();
            CloudBlobContainer cloudBlobContainer = blobClient.GetContainerReference("test-1");
            CloudBlobDirectory directory = cloudBlobContainer.GetDirectoryReference("sub1");
            foreach (IListBlobItem blobItem in directory.ListBlobsSegmentedAsync(null).Result.Results)
            {
                if (blobItem is CloudBlockBlob blob)
                { 
                    //the new package supports syncronous method
                    blob.FetchAttributes();

                    foreach (var metadataItem in blob.Metadata)
                    {
                    Console.WriteLine("\tKey: {0}", metadataItem.Key);
                    Console.WriteLine("\tValue: {0}", metadataItem.Value);
                    }
                }

            }            

            Console.ReadLine();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...