Meteor - 在客户端生成并下载文件

时间:2017-09-01 15:00:28

标签: meteor meteor-blaze

有没有办法生成csv文件并使用meteor在客户端下载?我希望用户能够单击按钮,然后在不离开当前页面的情况下下载文件。

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 个答案:

答案 0 :(得分: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