2017-09-01 179 views
0

有沒有什麼辦法可以生成一個csv文件並使用流星在客戶端下載?我會讓用戶點擊一個按鈕,然後下載文件而不離開當前頁面。流星 - 在客戶端生成並下載文件

Template.analytics.events({ 
    'click .csv-export' (event, template) { 
     const json2csv = require('json2csv'); 
     let fields = ['timestamp', 'user', 'category', 'action']; 
     let data = Analytics.find({}).fetch(); 
     try { 
     let result = json2csv({data: data, fields: fields}); 
     var filename = 'test.csv'; 
     var headers = { 
     'Content-Type': 'text/csv', 
     'Content-Disposition': "attachment; filename=" + filename 
     }; 
     this.response.writeHead(200, headers); 
     this.response.end(result); 
    } catch (err) { 
    console.error(err); 
    } 
    } 
}); 
+1

是的,這是可能的,你有一些代碼已經顯示?否則,這是非常普遍且需要解決方案的。你有沒有包含csv導出的任何npm包? – Jankapunkt

+0

嘿@Jankapunkt我添加了一些代碼,這是行不通的,但你可以有一個想法,我想要完成 – MMrj

+2

啊,我明白了!這對你有幫助嗎?看到這個小提琴:http://jsfiddle.net/UselessCode/qm5AG/ 編輯:用this.response用小提琴中的一些代碼替換部分。應該管用。 – Jankapunkt

回答

0

感謝@Jankapunkt我能解決這個問題。 下面是答案,所有代碼都在Template.onRendered中。

// DOWNLOAD CSV 

    this.csvFile = null, 
    makeTextFile = function() { 
     var csv = json2csv(Analytics.find({}).fetch(), true, false); 

     var data = new Blob([csv], { 
     type: 'text/csv' 
     }); 

     if (this.csvFile !== null) { 
     window.URL.revokeObjectURL(this.csvFile); 
     } 

     this.csvFile = window.URL.createObjectURL(data); 

     return this.csvFile; 
    }; 

    let csvExport = document.getElementById('csv-export'); 

    csvExport.addEventListener('click', function() { 
    let downloadLink = makeTextFile(); 
    window.open(downloadLink, '_blank'); 
    }, false); 

    //END DOWNLOAD CSV