【发布时间】:2020-12-20 12:19:32
【问题描述】:
所以我正在尝试逐块上传文件... Can PutBlock be used to append to an existing BlockBlob in Azure 从这个例子... 我正在上传一个 20mb 的文件,但最后,当我在容器上看到它时,它是 7mb,当我下载 blob 时它被破坏了......我做错了什么?
public async Task AppendBlobOnAsset(Stream stream, MediaServiceRequest request)
{
var cloudBlobContainer = new CloudBlobContainer(request.InputAssetStorageUri);
var blockBlob = cloudBlobContainer.GetBlockBlobReference(request.BlobName);
var blockList = new List<ListBlockItem>();
var blockListItems = new List<string>();
if (true)
{
var blocks = await blockBlob.DownloadBlockListAsync();
blockList = blocks.ToList();
blockListItems = blockList.Select(x => x.Name).ToList();
}
//string blockId = Guid.NewGuid().ToString("m");
string blockId = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("0000005"));
blockBlob.PutBlock(blockId, stream, null);
blockListItems.Add(blockId);
blockBlob.PutBlockList(blockListItems);
}
using var file = File.OpenRead("C:\\Projects\\file.mp4");
int bytesRead;
var appendBlobMaxAppendBlockBytes = 4000000;
var buffer = new byte[appendBlobMaxAppendBlockBytes];
while ((bytesRead = await file.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
var newArray = new Span<byte>(buffer, 0, bytesRead).ToArray();
Stream stream = new MemoryStream(newArray);
stream.Position = 0;
await AppendBlobOnAsset(stream, request);
}
【问题讨论】:
标签: asp.net-core-webapi azure-blob-storage