我正在Azure函数中运行一个非常简单的ExternalFileTrigger场景,我将一个创建的图像文件从一个onedrive目录复制到另一个。
function.json
{
"bindings": [
{
"type": "apiHubFileTrigger",
"name": "input",
"direction": "in",
"path": "Bilder/Org/{name}",
"connection": "onedrive_ONEDRIVE"
},
{
"type": "apiHubFile",
"name": "$return",
"direction": "out",
"path": "Bilder/Minimized/{name}",
"connection": "onedrive_ONEDRIVE"
}
],
"disabled": false
}
run.csx
using System;
public static string Run(string input, string name, TraceWriter log)
{
log.Info($"C# File trigger function processed: {name}");
return input;
}
每件事情似乎都运作良好但新的输出图像文件我损坏了。尺寸几乎是原来的两倍。 查看编码时,原始文件使用ANSI,但Azure Functions中新生成的文件采用UTF-8格式。 当源编码为UTF-8时,我正在使用文本文件时工作正常。
是否可以强制Azure绑定ExternalFileTrigger以使用ANSI?或者如何解决这个问题?
答案 0 :(得分:0)
如果要按原样复制文件,或对文件内容执行更细粒度的二进制操作,我建议使用Stream
类型而不是string
作为输入和输出绑定:
public static async Task Run(Stream input, Stream output, string name, TraceWriter log)
{
using (MemoryStream ms = new MemoryStream())
{
input.CopyTo(ms);
var byteArray = ms.ToArray();
await output.WriteAsync(byteArray, 0, byteArray.Length);
}
log.Info($"C# File trigger function processed: {name}");
}
更改function.json
中的输出绑定:
"name": "output",
此函数将执行文件的精确二进制复制,无需转换。
您可以在External File bindings中查看可用于绑定的其他类型(请参阅"用法"部分)。