Проблема привязки свойств BlobTrigger функций Azure

Я пытаюсь создать функцию Azure, которая использует BlobTrigger для управления некоторыми файлами, а затем сохраняет их обратно в большой двоичный объект.

Для этого я хочу получить доступ к объекту BlobProperties, чтобы проверить Content-Type файла, чтобы убедиться, что он поддерживается моей процедурой манипуляции.

Насколько я понимаю из этой статьи, я должен просто иметь возможность добавить параметр в метод с именем Properties, который имеет тип BlobProperties, и я могу подтвердить, что это работает для других перечисленных типов метаданных.

Однако всякий раз, когда я добавляю свойства, мое приложение не работает и сообщает о следующей ошибке:

Ошибка функции «Function1»: Microsoft.Azure.WebJobs.Host: ошибка метода индексирования «Function1». Microsoft.Azure.WebJobs.Host: невозможно связать параметр «Свойства» с типом «Microsoft.WindowsAzure.Storage.Blob.BlobProperties».

Что я делаю не так? Ниже мой метод:

public static void Run([BlobTrigger("TestContainer/{name}", Connection = "AzureWebJobsStorage")] Stream inputFile,
        string name, string BlobTrigger, IDictionary<string, string> Metadata, ILogger log, BlobProperties Properties)

Моя целевая платформа — .NET Core 3.1, а версия функций Azure — v3. У меня есть следующие пакеты NuGet:

  • Microsoft.Azure.WebJobs.Extensions.Storage 4.0.3
  • Microsoft.NET.Sdk.Функции 3.0.11

Я видел аналогичный пост, в котором предлагалось удалить ссылку на компонент Extensions.Storage, но при этом удаляется атрибут [BlobTrigger] и другие типы, поэтому это не работает. Связанные вопросы, кажется, относятся к 2018 году и относятся к более старым версиям функции Azure. Конечно, это должно сработать?

Оцените любые предложения, спасибо заранее.

Типы параметров функции Azure ограничены. Почему вы не рассматриваете BLOB-объекты как объекты, такие как blockblob, а как потоки? Я думаю, что такие классы, как blockblob, не должны вызывать проблем с сериализацией (кажется, я делал что-то подобное раньше). Должна быть возможность передать объект blob и управлять им, вы можете попробовать.

Cindy Pau 10.12.2020 11:55

@BowmanZhu извините, я не уверен, что понимаю, что вы имеете в виду, вы можете привести пример? Вы предлагаете изменить inputFile на тип CloudBlockBlob?

Ryan Thomas 10.12.2020 12:01

Я отправил ответ, вы можете посмотреть и попробовать.

Cindy Pau 11.12.2020 03:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
833
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто сделайте, как показано ниже:

using System;
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Blob;

namespace FunctionApp48
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([BlobTrigger("test/{name}", Connection = "str")]CloudBlockBlob myBlob, string name, ILogger log)
        {
            string a = myBlob.Properties.ContentType;
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Properties.Length} Bytes"+"\n"+a);
        }
    }
}

Я могу успешно получить тип содержимого blob:

И эталонный пакет:

<PackageReference Include = "Microsoft.Azure.WebJobs.Extensions.Storage" Version = "3.0.10" />
<PackageReference Include = "Microsoft.NET.Sdk.Functions" Version = "3.0.11" />

Да, это отлично работает в версии 3.0.10, но не работает в 4.0.3. Спасибо за вашу помощь, я думаю, что пока я буду придерживаться использования Stream и использовать привязку метаданных IDictionary<string, string> для проверки «hdi_isfolder», и я также могу использовать {name}.{extension} для фильтрации папки тоже :)

Ryan Thomas 11.12.2020 15:15

В версии 3.0.10 также есть проблема с «типом журнала, отсутствующим в словаре», но она решена в версии 3.0.11, и она работает должным образом. Спасибо.

Ryan Thomas 23.12.2020 11:54

WindowsAzure.Storage является устаревшим, Azure.Storage.Blobs тоже кажется неправильным. Попробуйте удалить их, а также добавить пакет NuGet Microsoft.Azure.Storage.Blob.

EladTal 29.11.2022 00:48

Другие вопросы по теме