Ответ 1
На сервере:
var fs = Npm.require('fs');
var fail = function(response) {
response.statusCode = 404;
response.end();
};
var dataFile = function() {
// TODO write a function to translate the id into a file path
var file = fileFromId(this.params.id);
// Attempt to read the file size
var stat = null;
try {
stat = fs.statSync(file);
} catch (_error) {
return fail(this.response);
}
// The hard-coded attachment filename
var attachmentFilename = 'filename-for-user.zip';
// Set the headers
this.response.writeHead(200, {
'Content-Type': 'application/zip',
'Content-Disposition': 'attachment; filename=' + attachmentFilename
'Content-Length': stat.size
});
// Pipe the file contents to the response
fs.createReadStream(file).pipe(this.response);
};
Router.route('/data/:id', dataFile, {where: 'server'});
На клиенте:
<a href='/data/123'>download zip</a>
Приятная часть этого заключается в том, что он загрузит файл в виде вложения, и вы можете настроить имя файла, которое видит пользователь. Трюк записывает функцию fileFromId
. Мне легче всего хранить все мои динамически сгенерированные файлы в /tmp
.
В этом ответе предполагается, что файлы генерируются динамически. Если вы хотите использовать статический контент, вы можете просто поместить свои файлы в каталог public
. Подробнее см. этот.