【问题标题】:Corrupt file when using Azure Functions External File binding使用 Azure Functions 外部文件绑定时文件损坏
【发布时间】:2017-06-24 08:25:14
【问题描述】:

我在 Azure Functions 中运行一个非常简单的 ExternalFileTrigger 场景,我将一个创建的图像文件从一个驱动器目录复制到另一个。

函数.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
}

运行.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?或者如何解决?

【问题讨论】:

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


    【解决方案1】:

    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 中查看您可以使用哪些其他类型进行绑定(参见“用法”部分)。

    【讨论】:

    • 使用 Stream 时,目标文件大小为 0 字节。我试图在返回之前将位置设置为 0,但没有运气。
    • @MartinHolm 是的,发布了一个实际有效的示例
    • 太棒了!试过了,正如你所说,这将是一个精确的二进制副本。谢谢老兄。
    • “外部文件绑定”的链接似乎不起作用(截至 2019 年 7 月 17 日)。有一个重定向到docs.microsoft.com/en-gb/azure/azure-functions/…,我可以在该列表中看到外部文件???
    • Checked Way Back Machine 并且页面已删除外部绑定...web.archive.org/web/20170710142234/https://docs.microsoft.com/…
    猜你喜欢
    • 2014-11-04
    • 2015-07-25
    • 2017-08-05
    • 2020-01-14
    • 2020-04-05
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2017-06-27
    相关资源
    最近更新 更多