将 5gb 文件从 Web 浏览器上传到 Blob 存储

Posted

技术标签:

【中文标题】将 5gb 文件从 Web 浏览器上传到 Blob 存储【英文标题】:uploading 5gb file from web browser to Blob Storage 【发布时间】:2021-12-25 08:14:01 【问题描述】:

我有点情况。我有一个顽固的客户,他想从网络浏览器上传大约 5gb 的 csv 文件。该文件的最终目标是访问 SQL Server,但我决定先将其放入 blob,然后有一个进程从 Blob 读取它并将其写入表。

为了让事情变得更复杂,我需要在开始将文件上传到 blob 之前验证文件结构(即文件格式、列数等)是否准确。如果这些不正确,我必须让用户知道文件上传无法完成。

要达到这些要求:

    用户将从 UI 上传文件,我们的代码首先检查文件格式(列名、文件扩展名等)是否正确,然后将文件流式传输到 blob 存储。

    一旦文件上传到 blob,我正在考虑使用 azure 函数,该函数将读取每 10K 行并通过转到表 A 来验证数据是否正确,然后将数据插入表 B。如果某些数据不准确,将数据行写入blob中的另一个目录供用户下载。我将重复这个过程,直到整个文件存储到表 B 中。

但是,我很困惑是采用上述 2 方法还是使用第 3 方法

    使用 Azure 数据工厂并创建管道以从 blob 获取文件并将其放入临时表中。一旦它在暂存表中可用,我需要通过使用另一个表验证数据来验证数据,然后将有效记录插入到目标表中。最后,无效记录将被写入第三张表(错误表),并将端点提供给用户下载该表的内容。

我很困惑是使用第二种方法还是第三种方法。请建议哪一个可能很快或不太可能出现性能问题。

如果您可以分享有关整体方法的 cmets,那就太好了。

非常感谢

【问题讨论】:

【参考方案1】:

建议使用Azcopy 工具从本地或云上传文件(使用此命令行工具可以轻松地将数据复制到 Azure Blob、Blob 文件和表存储中的 Blob 并获得最佳性能存储.) AzCopy 支持并发和并行性,以及在中断时恢复复制操作的能力。它为上传、下载更大的文件提供了高性能。请考虑将此库用于更大的文件。

要将数据引入系统,请使用 Azure 数据工厂、存储 Explorer、AzCopy 工具、PowerShell 或 Visual Studio。如果你使用 文件上传功能要导入大于 2 GB 的文件,请使用 PowerShell 或 Visual Studio。 AzCopy 支持的最大文件大小为 1 TB 并自动拆分超过 200 GB 的数据文件。

您可以在 Azure 数据工厂中使用 Custom Activity 来运行 Powershell 脚本。在该 Powershell 脚本中,您可以使用 Azcopy 命令将文件上传到 Blob 存储中。

【讨论】:

以上是关于将 5gb 文件从 Web 浏览器上传到 Blob 存储的主要内容,如果未能解决你的问题,请参考以下文章

将文件从浏览器上传到 Azure Blob 存储,无需 SAS 密钥

使用java中的azure函数将文件从浏览器上传到azure blob存储

使用 C#(无 JavaScript)直接将 Blazor WebAssembly 文件分块到 Azure Blob 存储

恢复文件从用户的机器上传到 Azure Blob 存储和从 Azure Blob 下载文件到用户的机器在 Typescript(angular) 从浏览器

当文件上传到 azure 文件共享时,如何添加触发器以将文件从 azure 文件共享移动到 azure blob?

Azure Blob 存储 - 从上传控制 .NET 上传