javascript - 使用请求模块下载文件并将结果传递给meteor.js 中的响应

标签 javascript node.js meteor iron-router node-request

我想下载文件而不保存在磁盘上并将文件内容传递给响应。我真的想以流的形式获取文件,然后将其传递给响应,客户端可以下载文件。 例如,使用下面的伪代码(使用 iron-routermeteorrequest ):

Router.route('/file/download', function() {
    var res = this.response;
    var query = this.params.query;
    var id = query.id;

    var request = Meteor.npmRequire('request');
    var future = new (Npm.require('fibers/future'))();

    request('http://myFileHosting.com/files/download?id='+ id, function (error, response, fileContent) {
        if (!error && response.statusCode == 200) {
            future.return(fileContent);
        }
        else
        {
            future.throw(error);
            console.log(error);
        }
    });

    var fileContent = future.wait();

    res.end(fileContent);
}, { where: 'server' });

如何做到这一点?

无需下载到磁盘即可传递文件以即时响应的真正解决方案是什么?

最佳答案

试试这个。

Router.route('/file/download', function() {
    var self = this;
    var res = this.response;
    var query = this.params.query;
    var id = query.id;

    var request = Meteor.npmRequire('request');
    var future = new (Npm.require('fibers/future'))();

    request('http://myFileHosting.com/files/download?id='+ id, function (error, response, fileContent) {
        if (!error && response.statusCode == 200) {
            self.response.statusCode = 200;
            self.response.setHeader("Content-Type", response.headers['content-type']);
            self.response.setHeader("Content-disposition", response.headers['content-disposition']);
            self.response.end(fileContent);
            future['return'](true);
        }
        else
        {
            future.throw(error);
            console.log(error);
        }
    });

    return future.wait();
}, { where: 'server' });

关于javascript - 使用请求模块下载文件并将结果传递给meteor.js 中的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29346083/

相关文章:

javascript - 如何使用 input type=submit 与 AJAX 表单

node.js - 我正在使用 Mongoose ,并希望所有成员都单独使用每项研究的结果

javascript - 在 Nodejs 中循环写入多个文件

node.js - npm 包在 MeteorJS 应用程序中无法按预期工作

javascript - Meteor,访问登录用户的谷歌联系人

javascript - 在 Meteor 中使用 Summernote 编辑器

javascript - 在 JavaScript 中组合对象数组以形成一个新的数组

javascript - 谷歌地图 : ReferenceError - google is not defined

javascript - 如何在点击时进行面向对象的 Canvas 元素比较?

javascript - 以编程方式使用 "npm install"的问题