2017-08-01 110 views
0

我正在使用sportradar api。我正在做的api調用返回一個png圖像。直到現在我已經完成了。下載API返回的圖像

const apiCall = (url) => { 
     return axios.get(url).then((data) => { 
      if(data){ 
       return Promise.resolve(data); 
      } 
      else{ 
       return Promise.reject(); 
      } 
     }); 
    } 

    //all data in data.assetlist 
    for(let i=0; i<data.assetlist.length; i++){ 
     let imageLink = data.assetlist[i].links[12].href; 
     let url = `https://api.sportradar.us/nfl-images-p3/ap_premium${imageLink}?api_key=${api_key}`; 
     apiCall(url).then((data) => { 
      console.log(data); 
      let blob = new Blob(data, {type: "image/png"}); // didn't compile with this line 

     }); 
    } 

上面的代碼工作正常,正在返回數據。但數據是奇怪的字符,如果我正確理解它,是因爲圖像是blob類型,我正在獲取數據流。

我從here了參考,並寫下這行

let blob = new Blob(data, {type: "image/png"}); 

我沒有嘗試這個,因爲我怕的是,數據是如此之大,它可能會崩潰我的系統(舊筆記本電腦)。如果我這樣做是正確的,我想知道,如何將這個blob文件保存到我的系統中作爲png文件,如果沒有,那麼我想知道如何將這個數據流轉換成圖像,並可以下載並保存在本地目錄。

+0

使用小圖像運行測試 –

+0

axios.get是否知道將響應視爲二進制? – Musa

回答

0

經過大量的研究,我發現這個解決方案,它的工作。

apiCall(url).then((response) => { 
     response.data.pipe(fs.createWriteStream('test.jpg')); 
    }); 
0

如果你得到的圖像已經是一個blob,你可以使用這個庫下載:我認爲你不應該這樣擔心的大小,只是去爲它 https://github.com/eligrey/FileSaver.js

let FileSaver = require('file-saver'); 
FileSaver.saveAs(blob, "my_image.png");