Как добавить и получить дополнительную информацию для BLOB-объекта Azure - PullRequest
0 голосов
/ 19 ноября 2018

Есть ли способ добавить дополнительную информацию для BLOB-объектов в Azure?

Я хочу сохранить некоторую релевантную информацию, которая связывает большой двоичный объект с другим объектом в базе данных документов, например строку, содержащую JSON.

Я знаю, что при использовании обозревателя хранилищ Azure есть метаданные для BLOB-объектов, но я хочу использовать их из кода.

Это актуальный вопрос по этой теме: Добавление описания / метаданных в BLOB-объект Azure

А как можно получить капли на основе этих метаданных?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

На первую часть вопроса ответил Михаил Stancescu, спасибо!

На вторую часть еще не ответили правильно.Поиск Azure - это решение, но это совершенно другой сервис.Я хочу решить эту проблему в своем классе репозитория.И я решил это.

Может быть, кому-то еще интересно, поэтому я делюсь своим решением:

За решением В AzureBlob есть метаданные, которые имеюттип строки.Я сериализовал объект в строку и сохранил эту строку в метаданных.Когда мне нужна эта информация в любом случае, я перечисляю метаданные в ней.Эта функциональность достигается при передаче значения Microsoft.WindowsAzure.Storage.Blob.BlobListingDetails.Metadata в параметр blobListingDetails в функции ListBlobs .

Когда прибыли большие объекты, я сразу же десериализовал обратно из JSON объект.Этот механизм отображается в LINQ Select:

.Select<Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob, T>(blob = > JsonConvert.DeserializeObject<T>(blob.Metadata["data"]))

После этого тип LINQ - T, поэтому я могу применить к нему выражение в LINQ Where.

Полное решение:

Функция GetMany

public IEnumerable<T> GetMany( Expression<Func<T, bool>> filter )
{
            return _AzureBlobCollection.BlobDirectory
                .ListBlobs( useFlatBlobListing: false, blobListingDetails: Microsoft.WindowsAzure.Storage.Blob.BlobListingDetails.Metadata )
                .OfType<Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob>()
                .Select<Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob, T>( blob => JsonConvert.DeserializeObject<T>( blob.Metadata[ "data" ] ) )
                .Where( filter.Compile() );
}

Эта функция может вызываться следующим образом: Репозиторий репозитория = ..

IEnumerable files = repository.GetMany( f => f.Partner = "Microsoft" );

Базовые классы

, где класс файла:

public class ContractFile : File
{
    public string Partner { get; set; }
    public Date CreationDate { get; set; }
    public string Remarks { get; set; }
    public string Filename { get; set; }
}
...
public class File
{
    public String File { get; set; }
    public Stream Data { get; set; }
}

И вставка следующая:

    public void AddOne( T file )
    {
        file.id = Guid.NewGuid().ToString();
        Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob blob = _AzureBlobCollection.BlobDirectory.GetBlockBlobReference( file.id );

        blob.UploadFromStream( file.Data );
        blob.Metadata.Add( "data", JsonConvert.SerializeObject( file ) );
        blob.SetMetadata();
    }
0 голосов
/ 19 ноября 2018

Вы проверили эту ссылку ?

public static async Task AddContainerMetadataAsync(CloudBlobContainer container)
{
   // Add some metadata to the container.
   container.Metadata.Add("docType", "textDocuments");
   container.Metadata["category"] = "guidance";

   // Set the container's metadata.
   await container.SetMetadataAsync();
}

Имейте в виду, что

Имя ваших метаданных должно соответствовать соглашениям об именах для идентификаторов C #.

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