如何动态地将文件添加到存储在 Azure Blob 存储中的 zip 存档中?

2023-11-30

我在 Azure 中有一个进程,可以生成大量 pdf 报告文件并将它们存储在 blob 存储中。我不是单独发送所有这些内容的链接,而是生成一个 zip 文件并将此链接发送给用户。

这个过程全部在一个进程中完成,并且一直运行良好。最近,我在将文件添加到 zip 存档时遇到了 OutOfMemory 异常错误,并且我正在努力寻找解决方案。

下面是我用来创建 zip 文件的代码(注意:使用 SharpLibZip 库)。目前,在添加大约 45 个每个文件 (PDF) 大约 3.5Mb 的文件后,它会失败并出现 OutOfMemoryException。当我点击以下行时发生故障:zipStream.PutNextEntry(newEntry)。

有谁知道我如何改进这个过程?压缩文件太小似乎会在这个级别失败。

Using outputMemStream As New MemoryStream()

    Using zipStream As New ICSharpCode.SharpZipLib.Zip.ZipOutputStream(outputMemStream)
          zipStream.SetLevel(7)

          Dim collD3 As UserSurveyReportCollection = GetFileList(RequestID)

          For Each entityD2 As UserSurveyReport In collD3

              Try
                  Dim strF As String = entityD2.FileLocation

                 'Download blob as memorystream and add this stream to the zip file
                 Dim msR As New MemoryStream 
                 msR = objA.DownloadBlobAsMemoryStream(azureAccount, ReportFolder, entityD2.FileName)
                 msR.Seek(0, SeekOrigin.Begin)

                'Determine file name used in zip file archive for item
                 Dim strZipFileName As String = DetermineZipSourceName(entityD2, strFolder, strFileName)

                 'Add MemoryStream to ZipFile Stream
                 Dim newEntry As ICSharpCode.SharpZipLib.Zip.ZipEntry = New ICSharpCode.SharpZipLib.Zip.ZipEntry(strZipFileName)
                 newEntry.DateTime = DateTime.Now

                 zipStream.PutNextEntry(newEntry)
                 msR.CopyTo(zipStream)
                 zipStream.CloseEntry()

                 msR = Nothing
                 zipStream.Flush()

                 intCounter += 1

        End If

    Catch exZip As Exception

    End Try

  Next


    zipStream.IsStreamOwner = False
    zipStream.Finish()
    zipStream.Close()

    outputMemStream.Position = 0

    Dim bytes As Byte() = outputMemStream.ToArray()
    result.Comment = objA.UploadBlob(bytes, azureAccount, ReportFolder, entityReport.FileName).AbsolutePath


    End Using
  End Using

对于任何使用 C# 并想要将大型 zip 文件写入 blob 存储的人:

var blob = container.GetBlockBlobReference(outputFilename);
using (var stream = await blob.OpenWriteAsync())
using (var zip = new ZipArchive(stream, ZipArchiveMode.Create))
{
    for (int i = 0; i < 2000; i++)
    {
        using (var randomStream = CreateRandomStream(2))
        {
            var entry = zip.CreateEntry($"{i}.zip", CompressionLevel.Optimal);
            using (var innerFile = entry.Open())
            {
                await randomStream.CopyToAsync(innerFile);
            }
        }
    }
}

这效果出奇的好。当流式传输到 Azure 时,应用程序内存约为 20Mb,CPU 非常低。我已经毫无问题地创建了非常大的输出文件(> 4.5Gb)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何动态地将文件添加到存储在 Azure Blob 存储中的 zip 存档中? 的相关文章

  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 如何获取 ADLS Gen2 中存储的文件的 MD5?

    我通过 sFTP 将每日文件接收到 ADLS gen 2 存储帐户 我需要通过检查 ADLS gen2 中存储的文件的 MD5 来验证文件 我尝试使用 BLOB API 目前它不支持 ADLS gen2 如果文件存储在 Blob 存储中 我
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 使用任何节点模块在内存中创建 ZIP 文件

    是否有任何节点模块可以在内存中创建 zip 我不想将 zip 文件保存在磁盘上 以便我们可以将这个创建的 zip 文件发送到其他服务器 从内存 做这个的最好方式是什么 这是我的例子 var file system require fs va
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 由于“请求缓慢”限制,Azure 网站不断重新启动

    我在西欧和标准模式下设置了一个天蓝色网站 世界标准时间 UTC 今天 2014 年 1 月 30 日凌晨 03 00 突然开始不断重新启动应用程序池 关闭原因是托管环境 我在 eventlog xml 中有很多这样的事件
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • Rails ActiveRecord group_by & sum db 结果与 Lazy HighCharts 一起使用

    我对 RoR Ruby 完全陌生 我正在使用 Lazy High Charts gem 根据一些数据库信息生成一些 Purdy 图表 我已经尝试过上一个问题中提供的答案 但我仍然对如何做到这一点感到有点困惑 我需要对 amount used
  • wpf 中最简单的按钮位置动画是什么?

    我想在单击按钮时在画布上移动按钮 使其逐渐改变其位置 动画 而不是消失并重新出现在新位置 您可以使用Storyboard这将顺利地移动它
  • 如何对齐两张侧面图像和一张更大的图像并保持宽高比

    我试图将右侧的两个图像与左侧的主图像对齐 并将侧面图像在顶部和底部对齐 就像这张图片中一样 下面的代码是我正在尝试的简化版本 我遇到的困难是 我无法准确地将包装纸的顶部边缘和底部边缘对齐 而不会溢出图像并保持对齐当我调整窗口大小时保持纵横比
  • 上一个/下一个按钮?

    我想为我拥有的论坛输入上一个和下一个按钮 因为论坛变得很长之后 它超出了背景图像并且看起来不太好 有谁知道一种简单的方法或我可以查看上一个和下一个按钮的东西 我想要它 所以每个页面仅限 5 个帖子或其他内容 如果有帮助的话 这是代码 如果这
  • 从列表视图中选择索引

    我在获取列表视图中所选行的索引时遇到一些问题 我想知道为什么这段代码不起作用 我在 SelectedIndex 下方看到一条红线 private void lvRegAnimals SelectedIndexChanged object s
  • icloud不更新下载过程

    通常 我的代码可以从 iCloud 下载文件 但有时下载过程不会更新 以下是一些代码片段 开始下载 NSFileManager fm NSFileManager defaultManager if fm startDownloadingUb
  • 在 POM 文件中使用 Groovy 进行分隔符切换对于不同的开发人员来说效果不同

    我们在 POM 文件中使用一小段 Groovy 代码 将主基目录中的反斜杠分隔符替换为正斜杠分隔符 有关这方面的更多信息 请参阅这篇文章 如何在maven中转换文件分隔符 然而 我们遇到的问题是 该链接中建议的 groovy 在一台开发人员
  • 如何限制服务器端的调用?

    我知道客户端 underscore js 可用于限制点击率 但如何限制服务器端的调用 我想过使用相同的模式 但不幸的是 throttle 似乎不允许区分 Meteor userId 之间的区别 Meteor methods doSometh
  • Oracle - 更新记录并在同一查询中返回更新日期

    我正在使用 Java 8 和 SpringJdbcTemplate和甲骨文 12 1 我想更新记录并获取记录更新的确切时间 jdbcTemplate update UPDATE SQL null 目前它返回 int 受影响的行数 但我想要确
  • 更改 Bookdown PDF 中的*第 X 章*名称

    代替第十章当从 bookdown 创建 PDF 时 我希望它是 M dulo X 西班牙语 所以我想知道如何使用 bookdown 更改章节名称 我的 YAML 是 title TITLE author Mario Modesto Mata
  • 使用 mySql 获取剩余天数、小时和分钟

    我陷入了获取 mySql 中两个日期之间的剩余天数 小时和分钟的困境 我有一个到期日期 我想将其与当前日期时间进行比较 并想要获取天 小时和分钟 这个 stackoverflow 链接可能会帮助你 有很多方法可以计算两个日期之间的差异 并且
  • wsDualHttpBinding ClientBaseAddress 和防火墙

    我计划将 wsDualHttpBinding 用于带有回调的 WCF 服务 客户端将是一个 Windows 窗体应用程序 通过 Internet 与服务进行通信 显然我无法控制客户端的防火墙 所以我想知道在客户端设置 ClientBaseA
  • 如何使部分不可编辑的表格单元格与内联 JavaScript 函数兼容?

    那么 几天前 我发布了这个问题 几乎相同 并收到了非常有帮助的答复 然而 为了制作一个表格计算器 我已经有了一个id设置为某一列的每个表格行 将表格变成计算器 当我尝试自己应用它时 这会弄乱原始问题的答案 JavaScript 将单位 kg
  • 如何确保 WorkManager 取消我的 Worker?

    WorkManager 文档中提到取消 Worker 是最大努力 WorkManager 尽最大努力取消任务 但这是 本质上是不确定的 任务可能已经在运行或完成 您尝试取消它 如果我有一个用例怎么办强制的那Worker调用取消方法之一后被取
  • 使用 TypeScript 在 Angular 1.x 中实现类级可注入依赖项?

    抱歉 标题有些复杂 我已经使用 Angular 1 x 几年了 最近一直在研究在我正在重构的代码库 也在 Angular 1 x 中 中使用 TypeScript 的潜力 目前 我在思考如何创建类 和类族 的可注入依赖项 而不是构造函数的依
  • PHP - 如何从 txt 文件中回显随机行?

    我想通过 PHP 从文件中回显随机行sitemap txt提供为 link1 link2 link3 link4 link10000 我尝试过使用这个功能 lines file sitemap txt data link lines arr
  • hadoop-streaming 示例运行失败 - 映射中的键类型不匹配

    I was running HADOOP HOME bin hadoop jar HADOOP HOME hadoop streaming jar D stream map output field separator D stream n
  • 我如何在 vercel 上使用 formidable 和 nextjs 上传文件

    api upload js import formidable from formidable export const config api bodyParser false export default async req res gt
  • android:如何在非活动课上使用文本到语音

    我想在我的应用程序中使用文本到语音 我找到了很多使用文本到语音的示例 如下所示Android 文本转语音应用程序 我想使用非活动类中的文本到语音 例如 我有一个生成布局并将此布局返回到我的主要活动的类 我在此布局上有按钮 并且我想在单击此按
  • 如何动态地将文件添加到存储在 Azure Blob 存储中的 zip 存档中?

    我在 Azure 中有一个进程 可以生成大量 pdf 报告文件并将它们存储在 blob 存储中 我不是单独发送所有这些内容的链接 而是生成一个 zip 文件并将此链接发送给用户 这个过程全部在一个进程中完成 并且一直运行良好 最近 我在将文