允许用户从 public 文件夹 Meteor.js 下载文件

Allow user to download file from public folder Meteor.js

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

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

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

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

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

您有几个选择:

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

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

这是让我很高兴的解决方案。感谢朋友的提议,我将 .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 中添加了一个 link:


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

...而且效果很好。 "Like a charm",就像你们喜欢说的那样:)

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