Azure Blob 存储中的批量下载

Bulk Downloads in Azure Blob Storage

我需要想办法让我的用户从 Azure Blob 存储下载几个 pdf 文件(有时是数千个),我知道我可以并行下载文件,这会让事情变得更快,但是这里的问题是用户可能有数千个 pdf 文件要下载,这根本不合理。

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

有没有办法创建文件的 zip 文件并让用户下载(上述方法除外)?我看到了关于此主题的其他问题,但 none 给出了适合我需要的 answer/solution。

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

提前致谢。

由于没有人给出答案,而且我在 stack overflow 和其他网站上看到了更多关于此的帖子,我决定在这里分享我的解决方案 (无法分享代码,因为原因... )

首先,截至今天 04-09-2020,仍然不支持从 Azure Blob 存储以 zip(或其他格式)直接从 azure 批量下载到客户端,而不通过服务器路由下载流进行组织和压缩。


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

在我的研究过程中,我考虑过在 javascript 中通过内存在客户端完成所有操作,然后让客户端下载它,但由于我的下载可能在 GB 大小范围内,因此内存可能非常昂贵。

解决方法...
然后我遇到了一个名为StreamSaver的javascript库,这个库用流写文件并直接在客户端机器上写,这意味着内存开销要少得多.
幸运的是,这个库还允许组织 'download directory' 中的文件,这些文件将提示给用户,甚至让我在告诉用户他是否想要之前压缩该目录下载它,意味着这个库几乎解决了我所有的问题。

现在我只有一个javascript调用的webmethod,returns所有的Azure SASurl都可以从中下载,其余的都在javascript中客户.


TL;DR:
使用 StreamSaver javascript 库从客户端下载、组织和压缩所有文件,然后提示他们下载它,仅使用网络方法获取所有 urls 至极待下载。

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

  • Chrome;
  • 火狐;
  • 歌剧;
  • 边缘(铬)

我在使用 StreamSaver 库时遇到的问题...
有几个drawbacks/problems跟库,

  • 1st Safary 不支持!有关此的更多信息 here
  • 2nd StreamSaver 只允许压缩到小于 4GB 的文件,这可以通过使用另一个库进行压缩来解决...