允许用户从 public 文件夹 Meteor.js 下载文件
Allow user to download file from public folder Meteor.js
我正在生成一个 .xlsx
文件,然后将其放入 "../web.browser/app/cheques.xlsx"
。据我了解,它相当于构建中的 public 文件夹。问题是我无法设法让它可供下载。
这是服务器方法中的一段代码,我将文件放入该位置:
workbook.xlsx.writeFile("../web.browser/app/cheques.xlsx")
.then(function() {
console.log('done');
});
那么我应该使用 fs
还是 Picker.route
来完成这项工作?
不建议这样做。在生产环境中,您无论如何都无法使用构建目录。
您有几个选择:
- 将文件存储在文件系统中定义的位置(不是
/public) 像 Apache 这样的其他东西可以从
提供服务
- 存储
Amazon S3 存储桶中的文件,然后让 AWS 为它们提供服务
- 将文件存储在 Mongo 集合中,使用这样的包
https://github.com/vsivsi/meteor-file-collection
我更喜欢最后一个,因为你所有的数据和文件都在一个地方。
这是让我很高兴的解决方案。感谢朋友的提议,我将 .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
中添加了一个 link:
<a href='/export/all' rel='external' download> Export my file </a>
...而且效果很好。 "Like a charm",就像你们喜欢说的那样:)
我希望这会对某人有所帮助。
我正在生成一个 .xlsx
文件,然后将其放入 "../web.browser/app/cheques.xlsx"
。据我了解,它相当于构建中的 public 文件夹。问题是我无法设法让它可供下载。
这是服务器方法中的一段代码,我将文件放入该位置:
workbook.xlsx.writeFile("../web.browser/app/cheques.xlsx")
.then(function() {
console.log('done');
});
那么我应该使用 fs
还是 Picker.route
来完成这项工作?
不建议这样做。在生产环境中,您无论如何都无法使用构建目录。
您有几个选择:
- 将文件存储在文件系统中定义的位置(不是 /public) 像 Apache 这样的其他东西可以从 提供服务
- 存储 Amazon S3 存储桶中的文件,然后让 AWS 为它们提供服务
- 将文件存储在 Mongo 集合中,使用这样的包 https://github.com/vsivsi/meteor-file-collection
我更喜欢最后一个,因为你所有的数据和文件都在一个地方。
这是让我很高兴的解决方案。感谢朋友的提议,我将 .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
中添加了一个 link:
<a href='/export/all' rel='external' download> Export my file </a>
...而且效果很好。 "Like a charm",就像你们喜欢说的那样:)
我希望这会对某人有所帮助。