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

从浏览器从Azure Blob存储中顺序下载文件

步兴德
2023-03-14

简要背景:我有一个在Azure Blob存储中存储文件的web服务。该服务的用户可以一次下载多个文件。如果下载的所有文件的总文件大小相对较小,那么我在服务器上压缩文件并返回该压缩文件--这里没有问题。

场景:例如,如果一个用户想要下载3个每个1GB的文件,那么我将这些文件下载到服务器是不现实的,将它们压缩,然后将压缩文件返回到浏览器。因此,对于这些场景,我将Azure Blob Storage URL返回给浏览器,并让用户直接从Azure Blob Storage下载文件,以免给服务器带来压力。

问题:目前,浏览器只是接收所有这些URL并一次下载它们。我需要一个顺序下载这些文件的方法。因此浏览器接收Blob存储URL的列表,并一次下载一个。然而,我不知道如何在浏览器上检测何时一个下载完成,然后才能开始另一个下载。

任何关于我应该如何处理这件事的建议/建议都是欢迎的。

编辑:我的前端收到一个下载ID的列表,并开始下载

for(var i = 0; i < listOfDownloads.length; i++) {

    //Go direct to Azure blob storage for each ID in list of IDs
    //This immediately begins a download direct from blob storage
    window.location.href = {azure blob storage URL};

    //Find way of detecting when download complete so can move on to next

}

共有1个答案

长孙朝明
2023-03-14

您可以使用promise尝试jQuery.FileDownLoad库:

function downloadFilesSequantially(listOfDownloads) {

    function downloadComplete(link) {
      return new Promise(function(res, rej) {
        $.fileDownload(link)
          .done(function() {
            res(0);
          })
          .fail(function() {
            rej(0);
          });
      })     
    }

    listOfDownloads.reduce(function(prev, next) {
      return prev.then(downloadComplete(next));
    }, Promise.resolve(0))
}

您还应该修改这个库,因为它需要特定的cookie作为响应,而由于直接链接到blob(,如果的语句条件被替换),您无法提供这些cookie:

if (true/*document.cookie.indexOf(settings.cookieName + "=" + settings.cookieValue) != -1*/) {

    //execute specified callback
    internalCallbacks.onSuccess(fileUrl);

    //remove the cookie and iframe
    document.cookie = settings.cookieName + "=; expires=" + new Date(1000).toUTCString() + "; path=" + settings.cookiePath;

    cleanUp(false);

    return;
}
 类似资料:
  • 我可以成功地上传到Azure Blob存储,但我在下载文件(csv和pdf文件)时遇到了问题。 我的目标是将文件下载到浏览器(因为这将是一个web应用程序,我不知道下载文件的本地路径)。

  • 我有一个基于Spring(Spring Security,Spring控制器和MVC)的项目,所以在我的超文本标记语言页面中,我必须允许文件下载。 我处理事件并使用基于jquery插件的代码 在我的控制器中: 但它在Spring Security性方面有问题,比如这个post x-frame,在internet explorer上不起作用。那么,有没有一种不用插件就能下载存储在我服务器上的文件的方

  • 我知道这个问题已经被问了好几次了,但这些问题的解决方案对我的情况没有帮助。 我想从这个网站下载一个数据集:https://datadashboard.fda.gov/ora/cd/inspections.htm 以下是“数据集”的HTML: 以下是“整个检测数据集”的 HMTL: 下面是我获取数据集的代码: 我也尝试过: 但我得到这个错误: 文件“FDAComplianceDashboardIns

  • 问题内容: 我有以下代码,可让用户下载csv文件中的数据字符串。 如果客户端运行代码,它将生成空白页并开始下载csv文件中的数据,效果很好。 所以我试图用JSON对象来做到这一点 但是我只看到一个页面,上面显示了JSON数据,没有下载它。 我进行了一些研究,并且该研究声称可以工作,但是我的代码没有任何区别。 我在代码中缺少什么吗? 问题答案: 这是我为应用程序解决的方式: HTML: JS(纯JS

  • 问题内容: 我的代码从远程URL获取文件并在浏览器中下载文件: 代码:http://play.golang.org/p/x-EyR2zFjv 可以获取文件,但是如何在浏览器中下载文件? 问题答案: 要使浏览器打开下载对话框,请在响应中添加和标头: 在将内容发送到客户端之前,请执行此操作。您可能还希望将响应的标头复制到客户端,以显示适当的进度。 要将响应主体流传输到客户端而不将其完全加载到内存中(对

  • 我正在使用谷歌云存储来存储我的谷歌应用程序引擎应用程序的图像,我试图访问这样的图像: 但是,这会显示“拒绝访问”或向我显示Google登录提示。然后我尝试使用签名URL来授予客户端访问权限。 我生成了要签名的URL,如下所示: 然后用p12文件生成Base64并用Java编译,但我得到了以下错误: 我做错了什么?有没有办法不经身份验证就从地面军事系统访问图像?