Azure 函数不会创建 blob 元数据

Posted

技术标签:

【中文标题】Azure 函数不会创建 blob 元数据【英文标题】:Azure function will not create blob metadata 【发布时间】:2019-07-10 03:02:18 【问题描述】:

我喜欢将一些元数据写入现有的 blob。该函数运行没有任何错误,但 blob 元数据未更改或未创建。

 #r "Microsoft.WindowsAzure.Storage"

 using System; using System.Configuration; using System.Net; using
 System.Text; using Microsoft.Azure; using
 Microsoft.WindowsAzure.Storage; using
 Microsoft.WindowsAzure.Storage.Blob;

 public static void Run(string myQueueItem, ILogger log) 
     string[] myQueueItems = myQueueItem.Split(':');

     string DocumentID = myQueueItems[0];
     string MetaDataKey = myQueueItems[1];
     string MetaDataValue = myQueueItems[2];


     CloudStorageAccount storageAccount = CloudStorageAccount.Parse("");
     CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
     CloudBlobContainer container = blobClient.GetContainerReference("test123");

     CloudBlob blob = container.GetBlobReference("teams.xlsx");
     blob.FetchAttributesAsync();

     if (blob.Metadata.ContainsKey(MetaDataKey))
     
         blob.Metadata[MetaDataKey] = MetaDataValue;
     
     else
         blob.Metadata.Add(MetaDataKey, MetaDataValue);
     

     blob.SetMetadataAsync();

     log.LogInformation($"C# Queue trigger function processed: blob.Name");

 

输入:测试:测试:测试 输出:C# 队列触发函数已处理:teams.xlsx

函数运行但未在 blob teams.xlsx 上创建值为“Test”的元数据“Test”。

问候 斯蒂芬

【问题讨论】:

我不熟悉这个操作,但假设SetMetadataAsync() 是真正的async,你正在做一个即发即弃的调用,因为你没有await 它。可能是请求在操作完成之前结束,导致您的问题。这是一种可怕的做法,但只是为了看看会发生什么,直到你可以正确实施,看看如果你把它改成blob.SetMetadataAsync().Result;会发生什么 谢谢,但是。结果将不起作用。我将重建代码,以便可以使用 await。当我将代码粘贴到控制台应用程序中时,结果将相同。 【参考方案1】:

感谢 Crowcoder 的帮助。我更改了代码,现在它运行了。

await blob.SetMetadataAsync();

【讨论】:

以上是关于Azure 函数不会创建 blob 元数据的主要内容,如果未能解决你的问题,请参考以下文章

未从 blob 上的 azure java sdk 收到元数据字段

如何更新 Azure.Storage.Blob 中的元数据

列出 Azure 存储容器中的 Blob,包括元数据

仅从 Azure 存储 [Azure-Blob][REST] 中的 Blob 列表获取特定元数据

带有 blobtrigger 的 Azure 函数 - 更新元数据

在 js 中的 azure blob 上设置元数据