1

我正在生成一个.xlsx文件,然后将其放入"../web.browser/app/cheques.xlsx". 据我了解,它相当于构建中的公用文件夹。问题是我无法让它可供下载。

这是服务器方法中的一段代码,我将文件放入该位置:

workbook.xlsx.writeFile("../web.browser/app/cheques.xlsx")
  .then(function() {
    console.log('done');
  });

那么我应该使用fs还是Picker.route完成这项工作?

4

2 回答 2

3

不建议这样做。在生产中,无论如何您都无法使用构建目录。

你有几个选择:

  1. 将文件存储在文件系统中定义的位置(不是 /public),像 Apache 这样的其他东西可以从中提供服务
  2. 将文件存储在 Amazon S3 存储桶中,然后让 AWS 为它们提供服务
  3. 使用这样的包将文件存储在 Mongo 集合中 https://github.com/vsivsi/meteor-file-collection

我更喜欢最后一个,因为您的所有数据和文件都在一个地方。

于 2016-10-02T11:05:48.917 回答
2

这是让我非常高兴的解决方案。感谢我朋友的提议,我将.xlsx生成代码放在了server-side route


Excel = require('exceljs');
fs = require('fs');

Picker.route('/export/:_cheques', function(params, req, res, next) {
    let data = Cheques.find(query).map((it) => {
      return {
        cheque_number: it.cheque_number, // & other data
      }
    });

    let workbook = new Excel.Workbook();

    let sheet = workbook.addWorksheet('Cheques', { properties: { tabColor: { argb: 'FFC0000' } } });

    sheet.columns = [
      { header: 'Номер чека', key: 'cheque_number', width: 30 },  // & other columns
    ];


    data.map(function(it) {
      sheet.addRow({
        cheque_number: it.cheque_number,  // & other data
      })
    });

    res.writeHead(200, {
      'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
      'Content-Disposition': headerFilename,
    });

    workbook.xlsx.write(res)
)};

然后我只是在我的内部添加了一个链接html


<a href='/export/all' rel='external' download> Export my file </a>

...而且效果很好。“就像一个魅力”,正如你们喜欢说的:)

我希望这会对某人有所帮助。

于 2016-10-02T18:59:50.210 回答