Exp*_*ngx 3 c# azure asp.net-core
我正在接收分块的文件内容。正如我所阅读的,建议使用 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!");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8695 次 |
| 最近记录: |