2015-09-13 6 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.js और 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); 
    }); 
} 

यह छोटी फ़ाइलों के लिए काम कर रहा है, लेकिन शायद बड़ी फ़ाइलों के लिए काम नहीं कर रहा है। मुझे लगता है कि मुझे Stream और अधिक खोदना चाहिए।

+2

बस ध्यान में रखना वर्तमान ब्लॉब आकार सीमा ब्राउज़र के लिए लगभग 500 एमबी है – tarikakyol

5

संपादित करें: syg उत्तर बेहतर है। बस downloadjs लाइब्रेरी का उपयोग करें।

मैंने जो उत्तर दिया है वह क्रोम पर अच्छी तरह से काम करता है, लेकिन फ़ायरफ़ॉक्स और आईई पर आपको इस कोड के कुछ अलग संस्करण की आवश्यकता है। इसके लिए लाइब्रेरी का उपयोग करना बेहतर है। (ताकि this समाधान में मदद मिली नहीं था एक फाइल डाउनलोड करने के लिए प्राधिकरण हैडर पास करनी होगी)


मैं इसी तरह की समस्या थी।

लेकिन this पर आधारित उत्तर पर आप Fetch API द्वारा डाउनलोड की गई फ़ाइल को सहेजने के लिए createObjectURL का उपयोग कर सकते हैं।

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

फ़ायरफ़ॉक्स में काम नहीं करता – David

संबंधित मुद्दे

 संबंधित मुद्दे