使用 Azure Functions 外部文件绑定时文件损坏
Corrupt file when using Azure Functions External File binding
我是 运行 Azure Functions 中一个非常简单的 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?或者如何解决?
2019 年更新:外部文件绑定似乎已从当前版本的 Azure Functions 中弃用。
如果你想按原样复制文件,或者对文件内容进行更细粒度的二进制操作,我建议你使用 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(参见 "usage" 部分)中查看哪些其他类型可用于绑定。
我是 运行 Azure Functions 中一个非常简单的 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?或者如何解决?
2019 年更新:外部文件绑定似乎已从当前版本的 Azure Functions 中弃用。
如果你想按原样复制文件,或者对文件内容进行更细粒度的二进制操作,我建议你使用 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(参见 "usage" 部分)中查看哪些其他类型可用于绑定。