使用Visual Studio 2017创建面向.Net Standard 2.0的Azure函数。
使用“添加新Azure函数”向导,使用以下方法签名成功创建了Blob触发方法。
public static void Run([BlobTrigger("attachments-collection/{name}")] Stream myBlob, string name, ILogger log)
此方法可以编译并正常工作。
但是,我们希望能够访问连接到CloudBlockBlob的元数据并保存到存储中,据我所知,使用流是不可能的。该网站上的其他答案,例如(Azure Function Blob Trigger CloudBlockBlob binding)建议您可以绑定到CloudBlockBlob而不是Stream并以这种方式访问元数据。但是建议的解决方案无法在最新版本的Azure Functions中编译。
Microsoft的在线文档(https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob#trigger---usage)似乎也证实可以将触发器绑定到CloudBlockBlob而不是Stream,但是没有提供语法示例。
有人可以澄清使Azure Function Blob存储触发器绑定到CloudBlockBlob而不是标准Stream所需的确切语法吗?
谢谢
答案 0 :(得分:2)
实际上CloudBlockBlob
可以工作,我们不需要FileAccess.ReadWrite
,因为它是BlobTrigger而不是Blob输入或输出。
public static Task Run([BlobTrigger("samples-workitems/{name}")]CloudBlockBlob blob, string name, ILogger log)
无法将BlobTrigger绑定到CloudBlockBlob的更新
有一个问题跟踪here,Function SDK与WindowsAzure.Storge
> = v9.3.2集成时出现了一些问题。因此,只需删除任何WindowsAzure.Storage
包引用,默认情况下内部将使用Function SDK引用v9.3.1。
答案 1 :(得分:1)
由于刘杰的见解,这个问题已经解决。
方法: 创建新的功能应用程序时,请为安装的Azure存储使用默认存储包
Microsoft.Azure.WebJobs.Extensions.Storage(3.0.1)
这将安装依赖项
WindowsAzure.Storage(9.3.1)
然后以下两个方法签名将正确运行
public static async Task Run([BlobTrigger("samples-workitems/{name}")]Stream myBlob, string name, ILogger log)
和
public static async Task Run([BlobTrigger("samples-workitems/{name}")]CloudBlockBlob myBlob, string name, ILogger log)