【问题标题】:Allow user to download file from public folder Meteor.js允许用户从公用文件夹 Meteor.js 下载文件
【发布时间】:2017-02-10 07:38:24
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: node.js meteor fs exceljs


    【解决方案1】:

    这是让我非常高兴的解决方案。感谢朋友的提议,我把.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>
    

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

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

    【讨论】:

    • 这是一个很好的解决方案,很好的结果!当然值得记住
    • 谢谢,迈克!一切顺利。
    【解决方案2】:

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

    你有几个选择:

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

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

    【讨论】:

    • 感谢您的回复。我刚刚创建了一个流,没有将文件保存在服务器或客户端上。我将在下面展示我的解决方案,但会将您的答案标记为正确的。
    猜你喜欢
    • 2012-10-08
    • 2020-06-04
    • 2010-10-15
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2019-04-06
    • 2020-07-28
    相关资源
    最近更新 更多