Azure 函数 blob 存储文件名

Posted

技术标签:

【中文标题】Azure 函数 blob 存储文件名【英文标题】:Azure function blob storage file name 【发布时间】:2018-08-12 21:16:03 【问题描述】:

当使用带有 blob 存储输出绑定的 azure 函数时,如何获取创建的 blob 的名称、路径或 URL?我想在保存后将其保存到数据库中。

我正在使用 Python,但任何示例都可以:

blob = open(os.environ['outputBlob'], 'wb')
blob.write(attachment.get_payload(decode=True))

print blob.name # this is not the correct name, but actually the temp file name I think

blob.close()

【问题讨论】:

尝试枚举暴露给您的函数的环境变量 - 您可能会在那里找到有关您的 blob 的更多数据。 嗨@Harry,你解决这个问题了吗? @BoitumeloDikoko 你解决了吗!? :) 我不知道使用 blob 存储输出绑定,而是想使用 blob 存储 python SDK 从函数内部完成这项工作... @jtlz2 我最终使用了一个写入存储队列的 C# blob 触发函数,然后使用 python 存储队列触发函数读取路径。这不是最优的,因此现在我们已经开始使用 C# 编写大部分函数,​​因为对 python 的支持是有限的。 【参考方案1】:

对于 C#: 正如https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob#input 所讨论的,您可以使用以下类型的 blob 绑定

下面是绑定json文件和代码的例子。我在 http return 中返回 outpuBlob.Uri 以获取 Blob 的主要位置路径。

绑定:-


  "bindings": [
    
      "authLevel": "function",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    ,
    
      "name": "$return",
      "type": "http",
      "direction": "out"
    ,
    
      "type": "blob",
      "name": "outputBlob",
      "path": "outcontainer/rand-guid",
      "connection": "AzureWebJobsDashboard",
      "direction": "inout"
    
  ],
  "disabled": false

函数代码(C#):

#r "Microsoft.WindowsAzure.Storage"

using System.Net;
using Microsoft.WindowsAzure.Storage.Blob;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log,CloudBlockBlob outputBlob)

    log.Info("C# HTTP trigger function processed a request.");

    // parse query parameter
    string name = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
        .Value;

    if (name == null)
    
        // Get request body
        dynamic data = await req.Content.ReadAsAsync<object>();
        name = data?.name;
    



    return name == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : req.CreateResponse(HttpStatusCode.OK, "Hello " + outputBlob.Uri);

【讨论】:

谢谢,我认为python没有这个可以使用:-( @Thomas.. 他明确表示任何例子都可以。所以我给出了 C# 示例,以便他可以在 python 中查找类似的示例。 @Harry - 您是否尝试安装 python 存储模块并尝试将它们引用到您的 .py 文件中。您可以按照下面的说明安装它github.com/yokawasa/azure-functions-python-samples/blob/master/… 那么python blob绑定类型在哪里指定?【参考方案2】:

查看 Python 脚本进程空间中的环境变量。您应该有一个包含 blob 绑定路径的文件。

【讨论】:

相关环境变量的名称是什么? 不确定模式到底是什么。但是,函数 v1(使用此环境变量模型)上的 Python 函数已被弃用。如果您对编写 Python 函数感兴趣,请查看 Functions v2 上的 Python 支持,这是一个完整的重写:docs.microsoft.com/en-us/azure/azure-functions/…

以上是关于Azure 函数 blob 存储文件名的主要内容,如果未能解决你的问题,请参考以下文章

使用java中的azure函数将文件从浏览器上传到azure blob存储

使用 Azure 函数迭代 Blob 存储中的文本文件

使用 azure 函数从表单数据请求中详细说明并存储在 azure blob 中的多个文件

使用 epplus 从 blob 触发 azure 函数访问 excel 文件

Azure 函数 Blob 触发器将文件复制到文件共享

Azure 函数在 blob 触发期间找不到 blob