Хранилище BLOB-объектов Azure передает метаданные из триггера загрузки в Blob - PullRequest
0 голосов
/ 29 ноября 2018

Я разрабатываю набор функций Azure для выполнения этого высокоуровневого процесса

  • Получение HTTP-запросов через Http Trigger
  • Сохранение метаданных из этих запросов в Table Storage
  • Создание PDF-файла, загруженного в хранилище BLOB-объектов
  • Обновление записи в хранилище таблиц, чтобы оно содержало ссылку на документ

Все работает, кроме последней части.

Когда PDF загружен в хранилище BLOB-объектов, у нас есть доступ к метаданным запроса, но триггер BLOB-объекта имеет доступ только к загруженному потоку PDF.

Я пробовал следующее:

Загрузка документа

 var context = new OperationContext();
 context.UserHeaders = new Dictionary<string, string>();
 context.UserHeaders.Add("RowKey", entity.RowKey);
 context.UserHeaders.Add("PartitionKey", entity.PartitionKey);
 cloudBlockBlob.UploadFromStream(downloadedStream, operationContext: context);

Частный метод запуска BLOB-объекта

public static void Run(
        [BlobTrigger(FunctionConstants.PrintSetToBlobName, Connection = ConnectionStringName)]Stream myBlob, 
        string name, 
        TraceWriter log)
{
     // code truncated for clarity
     string documentUrl = GetDocumentUrl();
     UpdateEntity(documentUrl);
}

private static void UpdateEntity(string documentUrl)
{
        // This doesn't seem like it will work
        OperationContext context = new OperationContext();
        EntityService entityService = new EntityService();

        context.UserHeaders.TryGetValue("RowKey", out string rowKey);
        context.UserHeaders.TryGetValue("PartitionKey", out string partitionKey);

        var entity = entityService.Get(rowKey, partitionKey);

        entity.DocumentUrl = documentUrl;
        entityService.Update(entity);
}

Я пытался передать OperationContext напрямую какпараметр в функции BlobTrigger.Run , но получаются ошибки времени выполнения, потому что это недопустимый ввод.

В конечном счете, мой вопрос заключается в том, как передать метаданные из CloudBlockBlob.UploadFromStream ми читать в Blob Trigger?

1 Ответ

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

UserHeaders устанавливает заголовки HTTP для запроса, который загружает большой двоичный объект в хранилище Azure.Эти заголовки не могут быть доступны в BlobTrigger, поэтому вы не можете использовать их для передачи дополнительных параметров.

Вы можете сохранить PartitionKey и RowKey в метаданных BLOB-объектов:

cloudBlockBlob.Metadata["PartitionKey"] = entity.PartitionKey;
cloudBlockBlob.Metadata["RowKey"] = entity.RowKey;
cloudBlockBlob.SetMetadata();

И в вашей другой функции свяжите BlobTrigger с CloudBlockBlob

public static void Run(
    [BlobTrigger(FunctionConstants.PrintSetToBlobName, Connection = ConnectionStringName)]CloudBlockBlob cloudBlockBlob, 
    string name, 
    TraceWriter log)
{
    ...
} 

и прочитайте метаданные

cloudBlockBlob.FetchAttributes();
var partitionKey = cloudBlockBlob.Metadata["PartitionKey"];
var rowKey = cloudBlockBlob.Metadata["RowKey"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...