我正在开发一组 Azure Functions 来执行此高级流程
- 通过Http Trigger接收HTTP请求
- 将这些请求的元数据保存到表存储
- 生成上传到 Blob 存储的 PDF
- 更新表存储中的记录以包含对文档的引用
除了最后一部分之外,一切正常。
当 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 触发器私有(private)方法
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 触发器中读取它?
最佳答案
UserHeaders
设置将 blob 上传到 Azure 存储的请求的 HTTP header 。这些 header 在 BlobTrigger
中不可用,因此您无法使用它们来传递其他参数。
您可以将 PartitionKey
和 RowKey
保存到 blob 元数据:
cloudBlockBlob.Metadata["PartitionKey"] = entity.PartitionKey;
cloudBlockBlob.Metadata["RowKey"] = entity.RowKey;
cloudBlockBlob.SetMetadata();
并在您的其他函数中将 BlobTrigger
绑定(bind)到 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"];
关于c# - Azure Blob 存储将元数据从上传传递到 Blob 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53541192/