当前位置: 首页 > 知识库问答 >
问题:

Azure函数应用程序blob触发器无法上传文件

濮阳君浩
2023-03-14

我已经创建了一个blob触发器,它从一个blob接受一个文件,解压缩它,并使用streams将它移动到另一个blob。

我的代码如下所示

[FunctionName("Requests")]
[StorageAccount("samplecontainer")]
public static void Run([BlobTrigger("incoming/{name}")]Stream myBlob,
    [Blob("processing/{name}.xml", FileAccess.Write)] TextWriter output,
    string name, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
    string returnValue;

    using (Stream blob = myBlob)
    {
        using (GZipStream decompressionStream = new GZipStream(blob, CompressionMode.Decompress))
        {
            log.LogInformation($"Unzipping file");
            name = name.Replace(".gz", "");
            var content = String.Empty;
            using (StreamReader reader = new StreamReader(decompressionStream))
            {
                content = reader.ReadToEnd();
                reader.Close();

            }
            returnValue = content;
        }
    }
    log.LogInformation($"C# Blob trigger function finished processing blob\n Name:{name} \n Now writing to xml");
    output.WriteLine(returnValue);
}

实际上,这将在本地运行时使用我的local.settings.json文件中的“azurewebjobstorage”:“UseDevelopmentStorage = true”。

然而,一旦我部署了这个应用程序,并使用Azure Storage Explorer将一个文件上传到real container,什么也没有发生,活动日志显示操作在Write.Tiny.txt.gz失败,找不到文件“D:\ home \ site \ wwwroot \ Requests \ tiny . txt . gz”。

我有超文本传输协议触发器可以工作,我已经尝试关闭配置WEBSITE_RUN_FROM_PACKAGE没有效果。我可能错过了一些设置或配置吗?当我在函数应用程序中控制台进入此路径并猫function.json我得到这个:

{
  "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.29",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "blobTrigger",
      "connection": "samplecontainer",
      "path": "incoming/{name}",
      "name": "myBlob"
    }
  ],
  "disabled": false,
  "scriptFile": "../bin/azure-functions.dll",
  "entryPoint": "Requests.Run"
}

共有2个答案

秦才良
2023-03-14

我完全相信我也需要Bowman Zhu的回答才能工作,但在我的具体情况下,我忘记了在appSettings.json中添加存储帐户作为连接字符串,因为我们最近更新到了Microsoft。azure . web jobs . extensions . storage版本3,这是我们的第一个blob触发器。

在appSettings.json:

{
  "ConnectionStrings": {
    "AzureWebJobsStorage": "{endpoint}"
  }
}
唐运诚
2023-03-14

好的,我可以重现您的问题。

既然你可以在本地工作,那么你的代码应该没有问题。

我可以解释为什么会发生这种情况。Azure 上的函数应用没有可将数据写入 Azure Blob 存储的 RBAC。

以下步骤可以解决问题:

首先,创建函数应用的标识。

其次,将您的功能应用程序的RBAC角色添加到存储帐户。

顺便说一下,上述设置不会立即生效,您需要等待几分钟才能生效。

 类似资料:
  • 我正在使用 Blob 触发器 Azure 函数来获取 Blob 文件数据,只要任何文件上传到容器。 使用上述方法,我能够获取上传的项目的URL。目前,上述代码是使用 Azure 提供的“在门户中开发”选项生成的。 是否有一种方法可以获取已上传的Blob文件的SAS URL?

  • 我在Visual Studio中创建了一个简单的blob触发器,init.py如下 function.json如下 local.settings。json如下所示 此代码在本地计算机上的visual studio中运行良好。但在azure portal上发布时,它无法从函数中读取blob路径。json并给出错误为 我已经使用命令发布了local.settings.json的contains。 .有

  • 我在Python中创建了一个Blob触发函数应用程序。我的要求是为每个blob上传运行一个单独的实例(用于并行处理),但这并没有发生。甚至我也修改了主机。根据以下链接,json如下:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob { “version”: “2.0”, “e

  • 我已将 Azure 函数设置为运行 Blob 触发器,(因此,当将 Blob 添加到容器时,它应该触发)。在门户中打开函数应用之前,函数不会运行。然后,它将拾取已添加的任何 blob 并像往常一样处理它们。为什么需要在门户中打开函数应用才能启动我的作业?这几乎就像函数应用程序进入睡眠状态,然后在我浏览到它时唤醒。我该如何防止这种情况发生? 这是我的克朗

  • 我使用blob触发器读取blob内容,作为pandas DF进行处理,并将blob附加到我使用的Azure SQL server。 blob触发器没有按预期工作,因此我将main函数中的所有代码都定义为: 但是,我得到了以下错误: 有人可以帮助我找到此问题的原因吗? function.json的配置如下:

  • 如果你使用blob存储触发器阅读Azure WebJobs上的留档,它们会提到这不是很可靠: WebJobs SDK扫描日志文件以查看新的或更改的blob。这个过程不是实时的;在创建blob后的几分钟或更长时间内,函数可能不会被触发。此外,存储日志是在“尽力而为”的基础上创建的;无法保证所有事件都将被捕获。在某些情况下,日志可能会丢失。如果您的应用程序无法接受blob触发器的速度和可靠性限制,建议