Azure Blob存储中的批量下载

时间:2020-06-23 15:47:40

标签: c# azure download blob azure-blob-storage

我需要找出一种方法,让我的用户从Azure Blob存储区下载几个pdf文件(有时是数千个),我知道我可以并行下载文件,这会使事情变得更快,但这是问题所在是因为用户可能要下载成千上万个pdf文件,这完全不合理。

此外,我无法将文件下载到另一台服务器上,无法压缩它们,也不能让用户从那里下载文件,因为这对我来说效率极低。

是否有一种方法可以创建文件的zip文件,并让用户下载该文件(上述方法除外)?我看到了与此主题有关的其他问题,但没有一个给出适合我需求的答案/解决方案。

那将是我做到这一点的绝对最佳方法?还是没有其他方法可以执行此任务?

谢谢。

1 个答案:

答案 0 :(得分:0)

由于没有人给出答案,并且我在堆栈溢出和其他站点上看到有关此问题的更多帖子,因此我决定在此处分享我的解决方案(由于原因...,无法共享代码)

首先,截至今天(2020年4月9日),仍然不支持直接从azure到客户端从zip(或其他格式)从Azure Blob存储批量下载,而没有将下载流程路由到组织和压缩。


我遇到的问题 ...
需要从 Azure Blob存储下载(几个)文件,将它们压缩为(也许按文件夹组织它们),并提示客户端下载批量,没有任何通过服务器的下载数据,也没有用分散的文件填充客户端下载文件夹 ...

在研究过程中,我曾考虑过通过内存在javascript客户端上执行所有操作,然后让客户端下载它,但是由于我的下载量可能在GB范围内,因此可能会占用相当大的内存。

解决方案 ...
然后,我遇到了一个名为 StreamSaver 的JavaScript库,该库使用流写入文件并直接在客户端计算机上写入,这意味着内存开销要少得多。
幸运的是,该库还允许组织“下载目录” 中的文件,这些文件会提示用户,甚至在告诉用户是否要下载该目录之前,我还可以压缩该目录。这个图书馆几乎解决了我所有的问题。

现在,我只有一个由javascript调用的网络方法,该方法可返回要从中下载的所有Azure SAS URL,其余全部在客户端的javascript中。


TL; DR:
使用StreamSaver javascript库从客户端下载,整理和压缩所有文件,然后提示它们下载,仅使用web方法下载所有网址。

此解决方案至少在以下浏览器中有效(根据我的测试):

  • Chrome;
  • FireFox;
  • 歌剧;
  • Edge(铬)

我在使用StreamSaver库时遇到的问题 ...
该库有一些缺点/问题,

  • 第一Safary不支持!关于此here
  • 的更多信息
  • 第二个StreamSaver仅允许压缩小于4GB的文件,可以使用另一个库进行压缩...