2016-10-02 64 views
1

我正在生成.xlsx文件,然后将其放入"../web.browser/app/cheques.xlsx"。据我了解,它是构建内的公共文件夹的等效物。问题是我无法设法使其可供下载。允许用户从公用文件夹下载文件Meteor.js

这是代码在服务器方法中的片段,在这里我把一个文件分成那个地方:

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

所以我应该用fsPicker.route做这项工作?

回答

3

这样做不可取。在生产中,生成目录将无法使用。

您有几种选择:

  1. 存储文件在文件系统(未 /公共)是别的东西,如Apache可以从
  2. 存储服务在该 文件定义的地方亚马逊S3存储,然后让AWS为他们服务
  3. 将文件存储在蒙戈集合,uing包这样 https://github.com/vsivsi/meteor-file-collection

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

+0

感谢您的回复。我只是在不保存服务器和客户端上的文件的情况下创建了一个流。我会在下面显示我的解决方案,但会将您的答案标记为正确的答案。 –

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> 

...和它工作完美。 “像一个魅力”,正如你们想说的:)

我希望这会帮助别人。

+0

这是一个很好的解决方案,很好的结果!当然值得记忆 – Mikkel

+0

谢谢,迈克!祝一切顺利。 –

+0

这只适用于网络有关移动应用程序? –

相关问题