Я разрабатываю набор функций 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?