gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:54:31 25 4
gpt4 key购买 nike

我找了又找,没有找到任何例子。

我在 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 的文件 block ,但我还没有找到执行此操作的最佳方法的示例。

所以我想找出的是上传大文件的最佳方法,它似乎必须分块完成,对于附加 blob 可能是 4mb,对于 block blob 可能是 100mb,但文档不清楚,也没有说明有例子。

最佳答案

我要感谢@silent的回复,因为他提供了足够的信息来确定我需要什么。有时只是有人来讨论问题就可以帮助我解决问题。

我在 BlockBlobClient.Upload 方法中发现的内容是为您分块文件流。我相信这是我研究中的 100mb block 。看起来它有 100mb block 和 50,000 个 block 的限制

对于AppendBlockClient.AppendBlock,它不会为您分块流。它的限制为 4mb block 和 50,000 个 block 。

这是我的代码的一部分,它允许我上传一个 6gb 文件作为 block 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 限制的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60304474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com