18

I am using Co-Request to read Zip file from http url, and i have below code to read from server..

The code works already. But I dont know how to write the response Zip to a file.

var co = require( "co" );
var request = require( "co-request" );
        var options = {
                        url: "http://www.example.com/sample.zip",
                        headers: {
                            'Token': Appconfig.Affiliate_Token,
                            'Affiliate-Id' : Appconfig.Affiliate_Id
                        }
                    }
                    console.log( "Downloading : zip file"  );
                    var j = yield request( options );

Co-Request is actually wrapper for Request and I have found below code to pipe file to stream. But not sure how to write the same using Co-Request with yield.

request.get('http://example.com/img.png').pipe(request.put('http://example.com/img.png'))

Please help how to write response zip to a file using yield and co-request

Qantas 94 Heavy
  • 14,790
  • 31
  • 61
  • 78
amaz
  • 345
  • 1
  • 4
  • 14
  • 2
    Check out co-request docs: https://github.com/request/request/blob/master/README.md You can pipe response to another stream request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png')) – vromanch Apr 15 '15 at 13:34
  • I don't think you can use generators for piping streams. – Bergi Apr 19 '15 at 13:36

1 Answers1

6

I think request cant pipe after data has been emitted from the response

use request instead of co-request, write a promise to achieve this

var co = require('co');
var request = require('request');
var fs = require('fs');

var url = 'http://google.com/doodle.png';

var requestPipToFile = function(url, filepath) {
    return new Promise(function(resolve, reject) {
        try {
            var stream = fs.createWriteStream(filepath);
            stream.on('finish', function() {
                console.log("pipe finish");
                return resolve(true);
            });
            return request(url).pipe(stream);
        } catch (e) {
            return reject(e);
        }
    });
};

co(function*() {
    var value = (yield requestPipToFile(url, './outfile'));
    return value;
}).then(function(value) {
    return console.log(value);
}).catch(function(err) {
    return console.error(err);
});
Larvata
  • 169
  • 4