C# Azure AppendBlob AppendBlock adding a file larger than the 4mb limit(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限制的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C#Azure AppendBlob AppendBlock添加大于4MB限制的文件
基础教程推荐
- Moq It.Is<>不匹配 2022-01-01
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
- C# 从 List<List<int>> 中删除重 2022-01-01
- WPF 模态进度窗口 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- .NET SerialPort DataReceived 事件未触发 2022-01-01
