使用Azure功能中的命令性绑定在虚拟文件夹中搜索Azure blob

时间:2017-10-15 14:42:26

标签: c# azure azure-storage-blobs azure-functions

我将blob存储在虚拟文件夹中,使用当前日期作为文件夹名称。 我需要blob的名称是唯一的,但我还需要能够在文件夹中搜索以选择某些文件(例如文件名startswith(id))。

以下是我用来存储blob的代码。

#r "Microsoft.WindowsAzure.Storage"
using Microsoft.WindowsAzure.Storage.Blob;
public static async Task Run(string input, Binder binder, TraceWriter log)
{
   string path = 
   "container/{DateTime.UtcNow.ToString("yyyy/MM/dd/HH")}/{someid}-
   {someguid}.json";
   var attributes = new Attribute[]
   {    
     new BlobAttribute(path),
     new StorageAccountAttribute("<storage connection>")
    };    

    using (var writer = await binder.BindAsync<TextWriter>(attributes))
    {
      writer.Write(input);
    }
}

我知道可以使用SDK搜索文件夹,但我真的希望能够使用命令式绑定对blob存储中的虚拟文件夹进行搜索。例如。我想获取过去5天内存储的所有blob。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

据我所知,目前azure storage listblob方法并不支持按时搜索。

首先,azure SDK还使用了azure storage rest api listblob方法。它只支持前缀作为过滤器。

所以我建议您尝试使用日期作为前缀来设置文件。

e.g 2017-2-15-xxxxx.txt

然后你可以使用&#34; 2017-2&#34;作为列出所有blob的前缀,以&#34; 2017-2&#34;。

开头

有关如何使用azure storage SDK的更多详细信息,您可以参考此code sample

答案 1 :(得分:0)

  1. 如果要使用blob触发器处理新blob,可以使用“名称模式”,类似"path": "input/original-{name}"。 更多详情:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob

  2. 您可以在azure存储表中存储创建的时间和blob路径。因此,在步骤1中,您将获得时间范围内的所有blob路径,并且在步骤2中,您将获得所有blob。这种方法需要额外的代码。