Azure函数-使用CloudBlockBlob而非流的StorageBlob触发方法签名

时间:2018-12-17 07:17:15

标签: azure azure-functions azure-storage-blobs

使用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所需的确切语法吗?

谢谢

2 个答案:

答案 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)