Можно ли создать функцию azure, запускаемую BLOB-объектами, с определенным именем файла? - PullRequest
0 голосов
/ 30 апреля 2020

Я использую C# для создания триггера, поэтому у меня нет явной функции. json file

   [FunctionName("Function1")]
        public static void Run([BlobTrigger("dev/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log)
        {
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");

            if (name=="Test1.xlsx")
            {
                // Any Task that I need to do
            }      

        }

Это успешно выполняется для меня, но я не уверен, что это Правильный способ сделать это, этот метод вызывает запуск функции для каждого файла и затем проверяет, соответствует ли он критериям.

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Во-первых, вы должны настроить stati c путь большого двоичного объекта, для которого вы хотите запустить функцию. Например: на изображении ниже путь установлен на container/file.csv. Поэтому, когда в моем контейнере BLOB-объектов с именем container есть файл с именем file.csv, запускается триггер BLOB-объекта.

enter image description here

Это мой пример код функции:

public static void Run(Stream myBlob, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob with Size: {myBlob.Length} Bytes");
}

Поскольку вы используете. NET, а не csx, код для вас будет выглядеть следующим образом:

[FunctionName("Function1")]
public static void Run([BlobTrigger("container/file.csv", Connection = "AzureWebJobsStorage")]Stream myBlob, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob with Size: {myBlob.Length} Bytes");
}

Смотрите, он выполняет функцию, когда я копирую файл с именем file.csv до container. Он не запускается для любых других файлов в любых других контейнерах. Полный путь должен совпадать.

enter image description here

Кроме того, каждая функция azure имеет файл функции. json, и это то, что используется для определения параметры привязки для функции. При использовании. NET, если вы выполните dotnet build и go и загляните в папку bin сборки, вы увидите, что генерируется function.json.

Единственная проблема в вашем коде функции заключается в том, что у вас есть второй параметр name. Этот параметр требуется только в том случае, если вы определяете динамический путь c в привязках функций, что не подходит для вас, так как вам нужен предопределенный путь stati c. Поэтому попробуйте удалить имя второго аргумента, и оно должно работать нормально.

1 голос
/ 30 апреля 2020

Да, вы можете связать определенный файл с файлом, он будет фильтровать все файлы, только функция с указанным именем вызовет функцию. Ниже приведен мой тест:

{
  "bindings": [
    {
      "name": "myBlob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "test/abc123.txt",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

Я загружаю несколько файлов, только этот вызов вызовет функцию, поэтому, если у вас все еще есть другие ошибки или проблемы, пожалуйста, предоставьте более подробную информацию или поделитесь своим кодом.

enter image description here

Обновление :

[FunctionName("Function1")]
        public static void Run([BlobTrigger("test/123.txt", Connection = "AzureWebJobsStorage")]Stream myBlob, ILogger log)
        {
            log.LogInformation($"C# Blob trigger function Processed blob \n Size: {myBlob.Length} Bytes");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...