C#Azure AppendBlob AppendBlock添加大于4MB限制的文件

C# Azure AppendBlob AppendBlock adding a file larger than the 4mb limit(C#Azure AppendBlob AppendBlock添加大于4MB限制的文件)
本文介绍了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限制的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)