我有一个现有的Azure函数解压缩文件并将每个文件添加为blob。
我现在想要迭代这些文件并执行它们(它们是SQL文件)。我不想触发基于blob创建的函数,而是在单个函数中运行它们。
在一个函数中,如何迭代容器中的blob列表并获取它们的内容?
由于
答案 0 :(得分:4)
如何迭代容器中的blob列表并获取其内容?
根据您的描述,我建议您使用CloudBlobContainer.ListBlobs方法列出容器中的blob。然后,您可以使用CloudBlockBlob.DownloadToStream方法将blob下载到函数的内存流中,以获取存储blob文件的内容。
更多细节,您可以参考以下代码。
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
"connectionstring");
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("contiainername");
// Loop over items within the container and output the content, length and URI.
foreach (IListBlobItem item in container.ListBlobs(null, false))
{
if (item.GetType() == typeof(CloudBlockBlob))
{
CloudBlockBlob blob = (CloudBlockBlob)item;
string text;
using (var memoryStream = new MemoryStream())
{
blob.DownloadToStream(memoryStream);
//we get the content from the blob
//sine in my blob this is txt file,
text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
}
Console.WriteLine("Block blob of length {0}: {1}", blob.Properties.Length, blob.Uri);
Console.WriteLine(text);
}
else if (item.GetType() == typeof(CloudPageBlob))
{
CloudPageBlob pageBlob = (CloudPageBlob)item;
Console.WriteLine("Page blob of length {0}: {1}", pageBlob.Properties.Length, pageBlob.Uri);
}
else if (item.GetType() == typeof(CloudBlobDirectory))
{
CloudBlobDirectory directory = (CloudBlobDirectory)item;
Getblobcontent(directory);
Console.WriteLine("Directory: {0}", directory.Uri);
}
}
获取azure存储blob目录中的blob内容:
private static void Getblobcontent(CloudBlobDirectory container)
{
foreach (IListBlobItem item in container.ListBlobs())
{
if (item.GetType() == typeof(CloudBlockBlob))
{
CloudBlockBlob blob = (CloudBlockBlob)item;
//int this method you could get the blob content in the directory
string text;
using (var memoryStream = new MemoryStream())
{
blob.DownloadToStream(memoryStream);
//we get the content from the blob
//sine in my blob this is txt file,
text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
}
Console.WriteLine("Block blob of length {0}: {1}", blob.Properties.Length, blob.Uri);
Console.WriteLine(text);
Console.WriteLine("Block blob of length {0}: {1}", blob.Properties.Length, blob.Uri);
}
else if (item.GetType() == typeof(CloudPageBlob))
{
CloudPageBlob pageBlob = (CloudPageBlob)item;
//int this method you could get the blob content
Console.WriteLine("Page blob of length {0}: {1}", pageBlob.Properties.Length, pageBlob.Uri);
}
else if (item.GetType() == typeof(CloudBlobDirectory))
{
CloudBlobDirectory directory = (CloudBlobDirectory)item;
Getblobcontent(directory);
Console.WriteLine("Directory: {0}", directory.Uri);
}
}
}