2015-09-13 7 views
11

Wenn ich eine Datei herunterladen möchte, was soll ich im folgenden Block then tun?Wie kann ich eine Datei mit window.fetch herunterladen?

function downloadFile(token, fileId) { 
    let url = `https://www.googleapis.com/drive/v2/files/${fileId}?alt=media`; 
    return fetch(url, { 
    method: 'GET', 
    headers: { 
     'Authorization': token 
    } 
    }).then(...); 
} 

Beachten Sie, dass sich die Codes auf der Clientseite befinden.

+0

Was einen Download-Attribut auf einen Link, über das Hinzufügen, die die URL hat 'https://www.googleapis.com/drive/v2/files/$ {fileId}? Alt = media' – Arjun

Antwort

12

Ich löse dieses Problem vorübergehend mit download.js und blob.

Es funktioniert für kleine Dateien, aber möglicherweise nicht für große Dateien. Ich denke, ich sollte graben Stream mehr.

+2

tragen nur im Kopf Die aktuelle Größe der Blobgröße beträgt ca. 500 MB für Browser – tarikakyol

5

BEARBEITEN: Syg Antwort ist besser. Verwenden Sie einfach downloadjs Bibliothek.

Die Antwort, die ich zur Verfügung gestellt habe, funktioniert gut in Chrome, aber auf Firefox und IE benötigen Sie eine andere Variante dieses Codes. Es ist besser, eine Bibliothek dafür zu verwenden.


ich ähnliches Problem hatte (müssen Autorisierungsheader passieren eine Datei so this Lösung nicht geholfen, zum Download).

Aber basierend auf this Antwort können Sie createObjectURL verwenden, um Browser eine Datei von Fetch API heruntergeladen zu speichern.

getAuthToken() 
    .then(token => { 
     fetch("http://example.com/ExportExcel", { 
      method: 'GET', 
      headers: new Headers({ 
       "Authorization": "Bearer " + token 
      }) 
     }) 
     .then(response => response.blob()) 
     .then(blob => { 
      var url = window.URL.createObjectURL(blob); 
      var a = document.createElement('a'); 
      a.href = url; 
      a.download = "filename.xlsx"; 
      a.click();      
     }); 
    }); 
+0

Dont funktioniert nicht in Firefox – David