当前位置: 首页 > 知识库问答 >
问题:

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

汪成仁
2023-03-14
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();

所以我想知道的是上传大文件的最好方法,它似乎必须分块完成,对于追加blobs,可能是4MB,对于块blobs,可能是100MB,但是文档不清楚,也没有示例。

共有1个答案

拓拔谭三
2023-03-14

我想感谢@Silent的回应,因为他提供了足够的信息来解决我需要什么。有时候,只要有人说说就能帮我把事情弄清楚。

我在BlockBlobClient.Upload方法中发现的是,它为您分块您的文件流。我相信这是100MB块从我的研究。它似乎有100MB块的限制,其中50,000块

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

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();
}
 类似资料:
  • 然而,库似乎不能为AppendBlob做同样的事情,那么如何手动完成这个分块呢?基本上,我认为这需要将InputStream分成更小的批... 使用Azure Java SDK 12.14.1

  • 如何添加规则来限制用户可以使用的最大存储空间大小?当前的限制了用户可以上传的文件的大小,但没有限制用户正在上传的文件夹/存储桶的大小。我希望对用户可以上传的所有内容设置一个限制,例如50 MB。 更新: 为了重新定义这个问题,假设用户已经上传了5张大小为10MB的图像,总共是50MB。现在我想限制用户上传更多文件,因为已经达到了最大存储桶大小(在我的例子中为50MB)。可能有两个文件,每个20 M

  • 我们有7.2个弹性团簇,其下有结点。6数据节点3主节点2摄取节点 最近,我们在我们的弹性原木中观察到以下误差。默认的限制似乎是[986061209/940.3MB],但实际的使用情况([990145976/944.2MB])不止于此。请让我们知道是否有任何配置将transport_request大小增加到986061209以上。 [2020-02-04T00:37:24,464][DEBUG][O

  • 问题内容: 我增加了Macbook Pro的最大文件限制,以便Elasticsearch可以处理更多文件,但是不起作用。 我运行命令’ulimit -a’,它说“打开文件”是100,000。我可以运行一个简单的shell脚本,如下所示: 而且我能够创建很多文件(在杀死脚本之前已超过60,000)。 但是,使用Java代码在“ / tmp”目录的空子目录中创建RandomAccessFiles,在得

  • 问题内容: 我正在使用JVM标志运行Java进程,并看到以下输出: 有没有办法解决这个问题? 问题答案: 当无法满足Java堆的分配或永久生成时,命令行选项告诉HotSpot VM生成堆转储。使用此选项运行不会产生任何开销,因此对于OutOfMemoryError需要很长时间才能浮出水面的生产系统很有用。 为了解决您面临的特定问题,可以使用以下纠正措施之一: 措施1: XX:HeapDumpSeg

  • 我需要读取大约500000条记录的Excel(xlsx)并每天添加大约2000条记录,我设法使用NPOI来完成,但内存消耗非常大(约8gb)。 我只能读取excel,使用ExcelDataReader消耗很少的内存,但是不可能添加更多的记录。 有什么工具可以写入这个不消耗大量内存的文件吗?