允许用户从公用文件夹 Meteor.js 下载文件
Posted
技术标签:
【中文标题】允许用户从公用文件夹 Meteor.js 下载文件【英文标题】:Allow user to download file from public folder 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
来完成这项工作?
【问题讨论】:
【参考方案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】:不建议这样做。在生产环境中,无论如何您都无法使用构建目录。
你有几个选择:
-
将文件存储在文件系统中定义的位置(不是
/public) 像 Apache 这样的其他东西可以提供服务
存储
Amazon S3 存储桶中的文件,然后让 AWS 为它们提供服务
使用这样的包将文件存储在 Mongo 集合中
https://github.com/vsivsi/meteor-file-collection
我更喜欢最后一个,因为您的所有数据和文件都在一个地方。
【讨论】:
感谢您的回复。我刚刚创建了一个流,没有将文件保存在服务器或客户端上。我将在下面展示我的解决方案,但会将您的答案标记为正确的。以上是关于允许用户从公用文件夹 Meteor.js 下载文件的主要内容,如果未能解决你的问题,请参考以下文章
允许用户从 AWS s3 或 Cloudfront 批量下载文件
CollectionFS、Meteor.js、Summernote(所见即所得)和文件上传