使用 Azure 函数处理文件
Process a file using Azure Function
我想处理一个输入文件并将其输出到某个位置以供 ex 使用。 FTP 或 Azure 存储。我正在尝试将 Azure Function 与 SaasFile input/output 结合使用。我遇到以下错误:
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
}
我想我在 运行 签名中遗漏了一些东西。我在 Azure documentation 上找不到它。
我需要帮助了解如何使用 FTP 和 Azure 存储进行处理。谢谢你的帮助。
假设您输出到特定的文件名,这是您可以执行此操作的一种方法。在此示例中,我绑定到保管箱文件。
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
}
为了绑定到不同的文件名,您需要有一个输入或输入触发器并将文件名传递给输出。与所有其他样本相同。
您真的不需要为此使用 http 触发器。
这是一个示例,它监视文件夹 (input-cs) 以查找 dropbox 中的新文件,并将文件复制到 googledrive 中的文件夹 (output-cs):
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 触发器并且需要根据某些 header 值或其他值在函数本身中创建文件名,请使用此示例:
请确保您使用的是 Functions 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
}
好消息.. 外部文件触发器可用于 Azure 函数。
如果要处理外部 FTP 文件夹中的文件,请先创建 FTP 连接,然后再使用它。
因此 function.json 中 FTP 连接的绑定数组如下所示。
{
"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
表示要处理的文件路径。因此,在上述情况下,当 input-cs 文件夹中的文件为 added/modified 时,将触发 azure 函数。
connection
表示外部文件连接器名称。
我想处理一个输入文件并将其输出到某个位置以供 ex 使用。 FTP 或 Azure 存储。我正在尝试将 Azure Function 与 SaasFile input/output 结合使用。我遇到以下错误:
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
}
我想我在 运行 签名中遗漏了一些东西。我在 Azure documentation 上找不到它。
我需要帮助了解如何使用 FTP 和 Azure 存储进行处理。谢谢你的帮助。
假设您输出到特定的文件名,这是您可以执行此操作的一种方法。在此示例中,我绑定到保管箱文件。
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
}
为了绑定到不同的文件名,您需要有一个输入或输入触发器并将文件名传递给输出。与所有其他样本相同。
您真的不需要为此使用 http 触发器。 这是一个示例,它监视文件夹 (input-cs) 以查找 dropbox 中的新文件,并将文件复制到 googledrive 中的文件夹 (output-cs):
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 触发器并且需要根据某些 header 值或其他值在函数本身中创建文件名,请使用此示例:
请确保您使用的是 Functions 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
}
好消息.. 外部文件触发器可用于 Azure 函数。
如果要处理外部 FTP 文件夹中的文件,请先创建 FTP 连接,然后再使用它。
因此 function.json 中 FTP 连接的绑定数组如下所示。
{
"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
表示要处理的文件路径。因此,在上述情况下,当 input-cs 文件夹中的文件为 added/modified 时,将触发 azure 函数。
connection
表示外部文件连接器名称。