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

我正在生成一个.xlsx文件,然后将其放入"../web.browser/app/cheques.xlsx" 。 据我所知这是一个相当于公共文件夹内的构build。 问题是,我无法设法使其可供下载。

这是服务器方法中的一段代码,我把一个文件放到那个地方:

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

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

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

你有几个select:

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

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

这是让我非常高兴的解决scheme。 感谢我朋友的build议,我将.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> 

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

我希望这会帮助别人。