如何下载和读取 Azure blob 容器文件

How to download and read Azure blob container files

我需要从 Azure blob 容器下载所有文件,然后一个一个地读取文件以找到所有 ASCII 字符值的总和。

这是在 C# 中下载和读取 Azure Blob 容器文件的示例。您需要创建函数 async-await 来连接 Azure Blob 容器并在本地下载 blob 文件以读取这些文件并 "do something"。在这个例子中,我们找到大小恰好为 11K bytes 的 joker 文件,并将 joker 文件和其他文件中每个字符的 ASCII 值相加,最后将 joker 文件的 ASCII 值与其他文件的 ASCII 值相乘ASCII 值。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;

namespace myApp
{
    class Program
    {
        static async Task Main(string[] args)
        {   /**********************************************************************************************
            * Sum the ASCII value - find the joker (228326687915660 = 329081602*693830)
            ***********************************************************************************************/
            Uri blobContainerUri = new Uri("blob-container-uri-find-the-joker");
            BlobContainerClient blobContainerClient = new BlobContainerClient(blobContainerUri, null);
            string localPath = "./data/";
            ulong sumASCIIValue = 0ul;
            ulong sumJokerASCIIValue = 0ul;

            await foreach (var blob in blobContainerClient.GetBlobsAsync())
            {
                string fileName = blob.Name;
                string localFilePath = Path.Combine(localPath, fileName);

                using (var file = File.Open(localFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                {
                    var blobClient = blobContainerClient.GetBlobClient(blob.Name);
                    await blobClient.DownloadToAsync(file);

                    if (file.CanRead)
                    {
                        file.Position = 0;

                        byte[] readBytes = new byte[file.Length];

                        // Detect joker file
                        if (file.Length >= 11000)
                        {
                            while (file.Read(readBytes, 0, readBytes.Length) > 0)
                            {
                                string asciiString = System.Text.Encoding.ASCII.GetString(readBytes);
                                foreach (Char chr in asciiString)
                                {
                                    sumJokerASCIIValue += (ulong)chr;
                                }
                            }
                        }
                        else
                        {
                            while (file.Read(readBytes, 0, readBytes.Length) > 0)
                            {
                                string asciiString = System.Text.Encoding.ASCII.GetString(readBytes);
                                foreach (Char chr in asciiString)
                                {
                                    sumASCIIValue += (ulong)chr;
                                }
                            }
                        }
                    }
                }

                Console.WriteLine("File Read: {0} sumASCIIValue: {1}, sumJokerASCIIValue: {2}", fileName, sumASCIIValue, sumJokerASCIIValue);
            }

            Console.WriteLine("ASCII value: {0}", sumASCIIValue * sumJokerASCIIValue);
        }
    }
}