我正在接收分块的文件内容。正如我所读到的,建议使用 Azure blob 存储的最新 nuget 是Azure.Storage.Blobs
,但我找不到任何示例或方法如何分块上传文件?支持吗?
我收到的范围为Range
标头。我正在用这个快速开始
您想要使用的方法是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!");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)