2015-09-13 82 views
11

如果我想下載一個文件,我應該怎麼做在then塊以下?如何使用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(...); 
} 

注意代碼在客戶端。

+0

增加一個屬性下載到具有URL的鏈接'https://www.googleapis.com/drive/v2/files/$ {}寫到FileID?ALT = media' – Arjun

回答

12

我暫時用download.jsblob解決這個問題。

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

它適用於小文件,但可能不適用於大文件。我想我應該多挖掘Stream

+2

只要記住什麼目前的BLOB大小限制爲500MB左右瀏覽器 – tarikakyol

5

編輯:SYG回答是好。只需使用downloadjs庫。

我提供的答案在Chrome上運行良好,但在Firefox和IE上,您需要此代碼的一些不同變體。爲此,最好使用庫。


我有類似的問題(需要通過授權頭下載一個文件,以便this解決方案並沒有幫助)。

但根據this的答案,您可以使用createObjectURL使瀏覽器保存由Fetch API下載的文件。

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

不工作在Firefox – David