Обработать файл с помощью функции Azure

Я хотел бы обработать входной файл и вывести его в какое-то место для ex. FTP или хранилище Azure. Я пытаюсь использовать функцию Azure с вводом-выводом SaasFile. Я получаю ниже ошибки:

2016-07-14T00:44:53 Welcome, you are now connected to log-streaming service. 2016-07-14T00:45:00.580 Script for function 'HttpTriggerCSharp1' changed. Reloading. 2016-07-14T00:45:00.580 Compiling function script. 2016-07-14T00:45:00.721 run.csx(24,25): error CS0622: Can only use array initializer expressions to assign to array types. Try using a new expression instead. 2016-07-14T00:45:00.721 Compilation failed.

Вот моя подпись функции:

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, string output, TraceWriter log)

Наручники:

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "apiHubFile",
      "name": "output",
      "path": "path/{file}",
      "connection": "ftp_FTP",
      "direction": "out"
    }
  ],
  "disabled": false
}

Я думаю, что я что-то упустил в Run подписи. Я не смог найти его в документации по Azure.

Мне нужна помощь, чтобы понять, как обрабатывать с использованием FTP и хранилища Azure. Спасибо за вашу помощь.

4 ответа

Решение

Вам не нужен http-триггер для этого. Вот пример, который просматривает папку (input-cs) для новых файлов в dropbox и копирует файл в папку (output-cs) в googledrive:

using System;

public static void Run(string input, out string output, TraceWriter log)
{
    output = input;
}

привязок:

{

 "bindings": [
    {
      "type": "apiHubFileTrigger",
      "name": "input",
      "direction": "in",
      "path": "input-cs/{name}",
      "connection": "dropbox_DROPBOX"
    },
    {
      "type": "apiHubFile",
      "name": "output",
      "direction": "out",
      "path": "output-cs/{name}",
      "connection": "googledrive_GOOGLEDRIVE"
    }
  ],
  "disabled": false
}

Если вам нужно использовать триггер Http и вам нужно создать имя файла в самой функции на основе некоторых значений заголовка или чего-то еще, используйте этот пример:

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

#r "Microsoft.Azure.WebJobs.Extensions.ApiHub"

using System.Net;
using Microsoft.Azure.WebJobs;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log, IBinder binder)
{
    //Get request  body  
    string data = await req.Content.ReadAsStringAsync();

    string fileName = "path/" + Guid.NewGuid().ToString() + ".txt";

    var writer = binder.Bind<TextWriter>(new ApiHubFileAttribute("DROPBOX_dropbox", fileName, FileAccess.Write));

    writer.Write(data);
    return req.CreateResponse(HttpStatusCode.OK);  
}

привязок:

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

Вот один из способов сделать это, предполагая, что вы выводите на определенное имя файла. В этом примере я привязываюсь к файлу dropbox.

using System.Net;

public static HttpResponseMessage Run(HttpRequestMessage req, TraceWriter log, out string output)
{
    output = req.Content.ReadAsStringAsync().GetAwaiter().GetResult();

    return req.CreateResponse(HttpStatusCode.OK);   
}

bindings:
{
  "bindings": [
    {
      "authLevel": "function",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "http",
      "name": "res",
      "direction": "out"
    },
    {
      "type": "apiHubFile",
      "name": "output",
      "path": "path/b.txt",
      "connection": "dropbox_DROPBOX",
      "direction": "out",
    }
  ],
  "disabled": false
}

In order to bind to different file names, you will need to have an input or input trigger and pass the file name to output. same as all other samples.

Хорошие новости. Для функций Azure доступен внешний файл-триггер.

Если вы хотите обработать файл во внешней папке FTP, сначала создайте FTP-соединение, а затем используйте его.

Итак, ваш массив привязок для FTP-соединения в function.json показан ниже.

{
  "bindings": [
    {
      "type": "apiHubFileTrigger",
      "name": "inputFile",
      "direction": "in",
      "path": "input-cs/{name}",
      "connection": "ftp_FTP"
    },
    {
      "type": "apiHubFile",
      "name": "$return",
      "direction": "out",
      "path": "output-cs/{name}",
      "connection": "ftp_FTP"
    }
  ],
  "disabled": false
}

В приведенном выше JSON,

дорожка

Представляет путь к файлу, который будет обработан. Таким образом, в приведенном выше случае функция Azure будет запущена, когда файл будет добавлен / изменен в папке input-cs.

соединение

Представляет имя соединителя внешнего файла.

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