允许用户从公共文件夹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:
- 将文件存储在文件系统中的某个定义的位置(而不是/ public),以使Apache可以从其他位置进行操作
- 将文件存储在Amazon S3存储桶中,然后让AWS提供服务
- 将文件存储在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>
…它的作品完美。 “像一个魅力”,正如你们想说的:)
我希望这会帮助别人。