3

我已按照Microsoft 教程处理基于在 Azure 存储中创建的 blob 的事件。

事件正在触发,但处理图像的事件代码被绕过,因为 EventGrid 事件没有填充输入流参数。这应该是通过blob(图像文件)的路径来处理的。

 public static async Task Run(
        [EventGridTrigger]EventGridEvent eventGridEvent,
        [Blob("{data.url}", FileAccess.Read)] Stream input,
        ILogger log)
    {
        try
        {
            log.LogInformation("Entered Thumbnail Function ..");

            if (input != null) 
            { //doesn't get to here ..

每次事件触发时的日志是

2018-11-15T05:33:41.096 [Information] Executing 'Thumbnail' (Reason='EventGrid trigger fired at 2018-11-15T05:33:41.0781270+00:00' ..

2018-11-15T05:33:41.096 [Information] Entered Thumbnail Function

2018-11-15T05:33:41.096 [Information] Executed 'Thumbnail' (Succeeded, 

2018-11-15T05:33:41.096 [Information] Executing 'Thumbnail' (Reason='EventGrid trigger fired at 2018-11-15T05:33:41.0781270+00:00', 

2018-11-15T05:33:41.096 [Information] Entered Thumbnail Function

2018-11-15T05:33:41.096 [Information] Executed 'Thumbnail' (Succeeded,
4

3 回答 3

5

本教程适用于v1 c# 脚本函数,因为您可以看到它在谈论函数代码时提到了csx 文件。但是现在项目链接指向v2预编译代码,如果我们严格按照教程更改代码,可能会出现问题。

让我们通过两个步骤来解决不一致的问题。

  1. 关键是函数没有连接到part1中创建的 blob 存储帐户,因此我们得到了空输入流。

    由于我们myblobstorage_STORAGE此步骤中创建了应用程序设置,因此我们只需将其添加到我们的功能代码中。

    public static async Task Run(
        [EventGridTrigger]EventGridEvent eventGridEvent,
        [Blob("{data.url}", FileAccess.Read, Connection = "myblobstorage_STORAGE")] Stream input,
        ILogger log)
    
  2. 在同一步骤中,教程为在第 1 部分中的Blob存储帐户中创建myContainerName的容器设置应用设置。thumbnails

    但在我们的代码中,我们可以看到它连接到为 Function app 创建的存储帐户AzureWebJobsStorage并希望从 app setting 获取容器名称THUMBNAIL_CONTAINER_NAME

    快速解决方法是替换AzureWebJobsStorageand THUMBNAIL_CONTAINER_NAME,并为thumbnailWidth.

    private static readonly string BLOB_STORAGE_CONNECTION_STRING = Environment.GetEnvironmentVariable("myblobstorage_STORAGE");
    ...
    var thumbnailWidth = 100;
    var thumbContainerName = Environment.GetEnvironmentVariable("myContainerName");
    

    当然,您可以选择添加THUMBNAIL_WIDTH到 Azure 门户的应用程序设置中。

重新发布,一切都应该工作。

于 2018-11-15T08:12:19.380 回答
1

数据永远不会被传入。事件网格事件只会传递元数据,其中将包括您可以在需要时用来检索内容的 blob URI。

于 2018-11-15T06:25:41.487 回答
0

除了当前接受的答案 ( https://stackoverflow.com/a/53314953/816663Connection ) 之外,如果您的函数应用程序具有系统或用户分配的具有适当 Blob 的标识,您还可以在不添加参数的情况下使其工作存储帐户的权限。

于 2021-08-08T19:55:39.560 回答