【问题标题】:Meteor - Generate and Download file in the client sideMeteor - 在客户端生成和下载文件
【发布时间】:2017-09-02 01:11:41
【问题描述】:

有没有办法生成一个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);
  }
  }
});

【问题讨论】:

  • 是的,有可能,您是否已经有一些代码要显示?否则,这是非常普遍且需要解决方案的。您是否包含任何用于 csv 导出的 npm 包?
  • 嘿@Jankapunkt 我添加了一些不起作用的代码,但你可以知道我想要完成什么
  • 啊,我明白了!这对你有帮助吗?看到这个小提琴:jsfiddle.net/UselessCode/qm5AG 编辑:用小提琴中的一些代码替换 this.response 的部分。应该工作。
  • 请将您的工作代码作为答案发布,以便其他人也可以从中受益。 ;-)
  • @Jankapunkt 完成

标签: meteor meteor-blaze


【解决方案1】:

感谢@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

【讨论】:

    猜你喜欢
    • 2014-12-17
    • 2021-09-08
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多