2015-09-13 17 views
11

Se voglio scaricare un file, cosa devo fare nel blocco then qui sotto?Come posso scaricare un file usando window.fetch?

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(...); 
} 

Nota i codici sono in lato client.

+0

Che dire l'aggiunta di un attributo download per un collegamento che ha l'URL 'https://www.googleapis.com/drive/v2/files/$ {} fileId? Alt = media' – Arjun

risposta

12

Ho risolto temporaneamente questo problema utilizzando download.js e blob.

let download = require('./download.min'); 

... 

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(function(resp) { 
    return resp.blob(); 
    }).then(function(blob) { 
    download(blob); 
    }); 
} 

Funziona per file di piccole dimensioni, ma forse non funziona per file di grandi dimensioni. Penso che dovrei scavare più Stream.

+2

basta tenere a mente il limite della dimensione del blob corrente è di circa 500 mb per i browser – tarikakyol

5

MODIFICA: risposta syg è migliore. Basta usare la libreria downloadjs.

La risposta che ho fornito funziona bene su Chrome, ma su Firefox e IE è necessaria una variante diversa di questo codice. È meglio usare la libreria per questo.


ho avuto problema simile (bisogno di passare un colpo di testa autorizzazione a scaricare un file in modo this soluzione non ha aiutato).

Ma in base alla risposta this è possibile utilizzare createObjectURL per fare in modo che il browser salvi un file scaricato dall'API di recupero.

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

Non funziona in firefox – David

Problemi correlati