1

Kurzer Hintergrund: Ich habe einen Webdienst, der Dateien in Azure Blob Storage speichert. Benutzer des Dienstes können mehrere Dateien gleichzeitig herunterladen. Wenn die gesamte Dateigröße aller heruntergeladenen Dateien relativ klein ist, dann packe ich die Dateien auf meinem Server und gebe diese ZIP-Datei zurück - kein Problem.Sequenziell Dateien von Azure Blob Storage aus einem Browser herunterladen

Szenario: Wenn ein Benutzer beispielsweise 3 Dateien herunterladen möchte, die jeweils 1 GB groß sind, ist es für mich nicht realistisch, diese Dateien auf den Server herunterzuladen, sie zu komprimieren und dann die ZIP-Datei an den Browser zurückzugeben. Für diese Szenarien gebe ich die Azure Blob Storage-URLs an den Browser zurück und lasse den Benutzer die Dateien direkt von Azure Blob Storage herunterladen, um meine Server nicht zu belasten.

Problem: Derzeit empfängt der Browser nur alle diese URLs und lädt sie alle gleichzeitig herunter. Ich brauche eine Möglichkeit, diese Dateien der Reihe nach herunterzuladen. Der Browser erhält also eine Liste von Blobspeicher-URLs und lädt sie einzeln herunter. Ich habe jedoch keine Ahnung, wie ich im Browser erkennen kann, wenn ein Download abgeschlossen ist und damit ein weiterer beginnen kann.

Alle Ratschläge/Vorschläge, wie ich das angehen sollte, sind willkommen.

EDIT: Mein Frontend erhält eine Liste von ID des Download und beginnt

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 

} 
+0

Zeigen Sie den Code, wie Sie diese Dateien auf einmal herunterladen, damit wir von diesem Punkt aus beginnen können. –

+0

Es gibt keinen Code zum Herunterladen dieser Dateien. Dies ist eine GET-Anforderung an eine Azure Blob Storage-URL. –

+0

Wie Sie GET-Anfrage gemacht haben, zeigen Sie Code: ist es über jQuery, etwas natives oder anderes. –

Antwort

1

Sie beim Herunterladen jquery.fileDownload Bibliothek versuchen mit Promise:

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)) 
} 

Auch sollten Sie diese Bibliothek ändern, weil es erfordert spezifische Cookie als Antwort, die Sie aufgrund direkter Links zu Blobs nicht liefern können (Statement Zustand wurde ersetzt):

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; 
} 
+0

Das sieht gut aus, ich werde es versuchen. Ich bin ein C# -Mann und mein JS/JQuery ist bestenfalls durchschnittlich, also vielen Dank dafür! –

Verwandte Themen