以 Azure Blob 存储块上传视频

Exp*_*ngx 3 c# azure asp.net-core

我正在接收分块的文件内容。正如我所阅读的,建议使用 Azure blob 存储的最新 nuget 是Azure.Storage.Blobs,但我找不到任何示例或方法如何以块的形式上传文件?支持吗?

我收到范围作为Range标题。我正在使用这个快速入门

Gau*_*tri 8

您想要使用的方法是BlockBlobClient.StageBlock上传块数据、BlockBlobClient.CommitBlock提交块并创建块 blob。

这是该功能的一个非常蹩脚的实现:)。它基本上从本地计算机读取一个非常大的文件,并通过将文件分割成 1MB 块来上传。

    static void UploadBlobsInChunks()
    {
        var containerClient = new BlobContainerClient(connectionString, "test");
        containerClient.CreateIfNotExists();
        var filePath = @"C:\temp\mymovie.mp4";

        var blockBlobClient = containerClient.GetBlockBlobClient("mymovie.mp4");
        int blockSize = 1 * 1024 * 1024;//1 MB Block
        int offset = 0;
        int counter = 0;
        List<string> blockIds = new List<string>();

        using (var fs = File.OpenRead(filePath))
        {
            var bytesRemaining = fs.Length;
            do
            {
                var dataToRead = Math.Min(bytesRemaining, blockSize);
                byte[] data = new byte[dataToRead];
                var dataRead = fs.Read(data, offset, (int) dataToRead);
                bytesRemaining -= dataRead;
                if (dataRead > 0)
                {
                    var blockId = Convert.ToBase64String(Encoding.UTF8.GetBytes(counter.ToString("d6")));
                    blockBlobClient.StageBlock(blockId, new MemoryStream(data));
                    Console.WriteLine(string.Format("Block {0} uploaded successfully.", counter.ToString("d6")));
                    blockIds.Add(blockId);
                    counter++;
                }
            }
            while (bytesRemaining > 0);
            Console.WriteLine("All blocks uploaded. Now committing block list.");
            var headers = new BlobHttpHeaders()
            {
                ContentType = "video/mp4"
            };
            blockBlobClient.CommitBlockList(blockIds, headers);
            Console.WriteLine("Blob uploaded successfully!");
        }
    }
Run Code Online (Sandbox Code Playgroud)