0

ディスクに保存せずにファイルをダウンロードし、ファイルの内容を応答に渡したい。本当に私はファイルをストリームとして取得し、それを応答に渡し、クライアントがファイルをダウンロードできるようにしたいと考えています。たとえば、以下の疑似コード ( 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' });

これを行う方法?

ディスクにダウンロードせずにファイルをオンザフライで応答するための実際のソリューションは何ですか?

4

1 に答える 1

1

これを試して。

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' });

于 2015-03-30T16:48:47.347 に答える