2016-07-14 2 views
3

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

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 documentation.

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

+0

Ошибка указывает на недопустимое использование выражения инициализатора массива в теле метода (строка 24). Вы не разделяете это? –

+0

@FabioCavalcante - Строка 24 - const string path = {output}; –

+0

Это точно строка, которая терпит неудачу, поскольку это недопустимый синтаксис. Что вы пытаетесь достичь? –

ответ

0

Для этого вам не нужен триггер http. Вот пример, который наблюдает папку (вход-CS) для новых файлов в Dropbox и копирует файл в папку (выход-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 
} 
+0

Можете ли вы показать один пример с файлом хранения Azure, таблицей SQL DB и FTP? Любая идея, когда она будет поддерживаться? –

+0

Что вам нужно в данном примере? Все они поддерживаются в настоящее время, кроме файлов Azure. Azure Blobs, Queues and Tables полностью поддерживаются, а также Dropbox, GoogleDrive, OneDrive, Ftp, Sftp, Box, Sql, SalesForce, ... –

+0

Мне нужно создать приложение-функцию, и я предпочел Powershell, но по-прежнему предпочитал попробуйте несколько образцов экспертов. Я хотел прослушать папку с Dropbox и загрузить файл, перенести файл или изменить существующий файл на FTP. Пробовал выше, но я получаю ошибку хоста: Microsoft.Azure.WebJobs.Extensions.ApiHub: Path 'input-cs' недействителен. IFolderItem.RootPath должен быть установлен в допустимое расположение каталога. Думая, что Dropbox не разрешит root, я изменил путь ввода-cs на input-cs/Apps/Azure/sitete /, но не смог запустить! :(Любая помощь? –

1

Вот один из способов сделать это, предполагая, что вы выводите на определенное имя файла. В этом примере я привязываюсь к файлу 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 
} 

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

3

Если вы должны использовать триггер 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 
} 
0

Хорошие новости .. Внешний триггером Файл доступен для Azure функций ,

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

Итак, ваш массив привязок для подключения к FTP в функции.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,

path

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

connection

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