本文介绍了C#Azure AppendBlob AppendBlock添加大于4MB限制的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我找了又找,没有找到任何示例。
我正在使用C#.NET Core中的Azure.Storage.Blobs Nuget包。
以下是我当前的代码无法工作的示例。
我得到一个状态:413(请求正文太大,超过了允许的最大限制。)
搜索似乎表明存在4MB的限制或100MB的限制,但我不清楚,但我认为追加Blob的限制为4MB,Block Blob的限制为100MB。
var appendBlobClient = containerClient.GetAppendBlobClient(string.Format("{0}/{1}", tenantName, Path.GetFileName(filePath)));
using FileStream uploadFileStream = File.OpenRead(filePath);
appendBlobClient.CreateIfNotExists();
appendBlobClient.AppendBlock(uploadFileStream);
uploadFileStream.Close();
由于4MB的限制,这不起作用,因此我需要附加4MB的文件块,但我尚未找到执行此操作的最佳方法的示例。
所以我想弄清楚上传大文件的最佳方式似乎必须分块完成,追加BLOB可能是4MB,BLOB是100MB,但文档不清楚,也没有示例。
推荐答案
我要感谢@Silent的回复,因为他提供了足够的信息来确定我需要什么。有时候,仅仅是有人跟我聊聊,就能帮我把事情搞清楚。
我在BlockBlobClient.Upload方法上找到的内容,它为您分块您的文件流。我相信这距离我的研究有100MB的距离。它似乎有100MB数据块和50,000个数据块的限制
对于AppendBlockClient.AppendBlock,它不会为您分块您的流。它限制为4MB数据块和50,000个数据块。
这是我的部分代码,它允许我将6 GB的文件作为块Blob上载,并将200MB的文件作为追加Blob上载。
BlobServiceClient blobServiceClient = new BlobServiceClient(azureStorageAccountConnectionString);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(azureStorageAccountContainerName);
containerClient.CreateIfNotExists();
if (appendData)
{
var appendBlobClient = containerClient.GetAppendBlobClient(string.Format("{0}/{1}", tenantName, Path.GetFileName(filePath)));
appendBlobClient.CreateIfNotExists();
var appendBlobMaxAppendBlockBytes = appendBlobClient.AppendBlobMaxAppendBlockBytes;
using (var file = File.OpenRead(filePath))
{
int bytesRead;
var buffer = new byte[appendBlobMaxAppendBlockBytes];
while ((bytesRead = file.Read(buffer, 0, buffer.Length)) > 0)
{
//Stream stream = new MemoryStream(buffer);
var newArray = new Span<byte>(buffer, 0, bytesRead).ToArray();
Stream stream = new MemoryStream(newArray);
stream.Position = 0;
appendBlobClient.AppendBlock(stream);
}
}
}
else
{
var blockBlobClient = containerClient.GetBlockBlobClient(string.Format("{0}/{1}", tenantName, Path.GetFileName(filePath)));
using FileStream uploadFileStream = File.OpenRead(filePath);
blockBlobClient.DeleteIfExists();
blockBlobClient.Upload(uploadFileStream);
uploadFileStream.Close();
}
这篇关于C#Azure AppendBlob AppendBlock添加大于4MB限制的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!