使用Azure Functions外部文件绑定时损坏文件

时间:2017-06-24 08:25:14

标签: encoding utf-8 binding onedrive azure-functions

我正在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?或者如何解决这个问题?

1 个答案:

答案 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中查看可用于绑定的其他类型(请参阅"用法"部分)。