使用 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" 部分)中查看哪些其他类型可用于绑定。