lib/request.js
function createReadStream() {
    var streams = AWS.util.nodeRequire('stream');
    var req = this;
    var stream = null;
    var legacyStreams = false;

    if (AWS.HttpClient.streamsApiVersion === 2) {
      stream = new streams.Readable();
      stream._read = function() {};
    } else {
      stream = new streams.Stream();
      stream.readable = true;
    }

    stream.sent = false;
    stream.on('newListener', function(event) {
      if (!stream.sent && (event === 'data' || event === 'readable')) {
        if (event === 'data') legacyStreams = true;
        stream.sent = true;
        process.nextTick(function() { req.send(function() { }); });
      }
    });

    this.on('httpHeaders', function streamHeaders(statusCode, headers, resp) {
      if (statusCode < 300) {
        this.httpRequest._streaming = true;

        req.removeListener('httpData', AWS.EventListeners.Core.HTTP_DATA);
        req.removeListener('httpError', AWS.EventListeners.Core.HTTP_ERROR);
        req.on('httpError', function streamHttpError(error, resp) {
          resp.error = error;
          resp.error.retryable = false;
        });

        var httpStream = resp.httpResponse.stream;
        if (legacyStreams) {
          httpStream.on('data', function(arg) {
            stream.emit('data', arg);
          });
          httpStream.on('end', function() {
            stream.emit('end');
          });
        } else {
          httpStream.on('readable', function() {
            var chunk;
            do {
              chunk = httpStream.read();
              if (chunk !== null) stream.push(chunk);
            } while (chunk !== null);
            stream.read(0);
          });
          httpStream.on('end', function() {
            stream.push(null);
          });
        }

        httpStream.on('error', function(err) {
          stream.emit('error', err);
        });
      }
    });

    this.on('error', function(err) {
      stream.emit('error', err);
    });

    return stream;
  }
function createReadStream() {
    var streams = AWS.util.nodeRequire('stream');
    var req = this;
    var stream = null;
    var legacyStreams = false;

    if (AWS.HttpClient.streamsApiVersion === 2) {
      stream = new streams.Readable();
      stream._read = function() {};
    } else {
      stream = new streams.Stream();
      stream.readable = true;
    }

    stream.sent = false;
    stream.on('newListener', function(event) {
      if (!stream.sent && (event === 'data' || event === 'readable')) {
        if (event === 'data') legacyStreams = true;
        stream.sent = true;
        process.nextTick(function() { req.send(function() { }); });
      }
    });

    this.on('httpHeaders', function streamHeaders(statusCode, headers, resp) {
      if (statusCode < 300) {
        this.httpRequest._streaming = true;

        req.removeListener('httpData', AWS.EventListeners.Core.HTTP_DATA);
        req.removeListener('httpError', AWS.EventListeners.Core.HTTP_ERROR);
        req.on('httpError', function streamHttpError(error, resp) {
          resp.error = error;
          resp.error.retryable = false;
        });

        var httpStream = resp.httpResponse.stream;
        if (legacyStreams) {
          httpStream.on('data', function(arg) {
            stream.emit('data', arg);
          });
          httpStream.on('end', function() {
            stream.emit('end');
          });
        } else {
          httpStream.on('readable', function() {
            var chunk;
            do {
              chunk = httpStream.read();
              if (chunk !== null) stream.push(chunk);
            } while (chunk !== null);
            stream.read(0);
          });
          httpStream.on('end', function() {
            stream.push(null);
          });
        }

        httpStream.on('error', function(err) {
          stream.emit('error', err);
        });
      }
    });

    this.on('error', function(err) {
      stream.emit('error', err);
    });

    return stream;
  }
function createReadStream ( ) { var streams = AWS . util . nodeRequire ( 'stream' ) ; var req = this ; var stream = null ; var legacyStreams = false ; if ( AWS . HttpClient . streamsApiVersion === 2 ) { stream = new streams . Readable ( ) ; stream . _read = function ( ) { } ; } else { stream = new streams . Stream ( ) ; stream . readable = true ; } stream . sent = false ; stream . on ( 'newListener' , function ( event ) { if ( ! stream . sent && ( event === 'data' || event === 'readable' ) ) { if ( event === 'data' ) legacyStreams = true ; stream . sent = true ; process . nextTick ( function ( ) { req . send ( function ( ) { } ) ; } ) ; } } ) ; this . on ( 'httpHeaders' , function streamHeaders ( statusCode , headers , resp ) { if ( statusCode < 300 ) { this . httpRequest . _streaming = true ; req . removeListener ( 'httpData' , AWS . EventListeners . Core . HTTP_DATA ) ; req . removeListener ( 'httpError' , AWS . EventListeners . Core . HTTP_ERROR ) ; req . on ( 'httpError' , function streamHttpError ( error , resp ) { resp . error = error ; resp . error . retryable = false ; } ) ; var httpStream = resp . httpResponse . stream ; if ( legacyStreams ) { httpStream . on ( 'data' , function ( arg ) { stream . emit ( 'data' , arg ) ; } ) ; httpStream . on ( 'end' , function ( ) { stream . emit ( 'end' ) ; } ) ; } else { httpStream . on ( 'readable' , function ( ) { var chunk ; do { chunk = httpStream . read ( ) ; if ( chunk !== null ) stream . push ( chunk ) ; } while ( chunk !== null ) ; stream . read ( 0 ) ; } ) ; httpStream . on ( 'end' , function ( ) { stream . push ( null ) ; } ) ; } httpStream . on ( 'error' , function ( err ) { stream . emit ( 'error' , err ) ; } ) ; } } ) ; this . on ( 'error' , function ( err ) { stream . emit ( 'error' , err ) ; } ) ; return stream ; }
Converts the request object into a readable stream that
can be read from or piped into a writable stream.

@note The data read from a readable stream contains only
the raw HTTP body contents.
@example Manually reading from a stream
request.createReadStream().on('data', function(data) {
console.log("Got data:", data.toString());
});
@example Piping a request body into a file
var out = fs.createWriteStream('/path/to/outfile.jpg');
s3.service.getObject(params).createReadStream().pipe(out);
@return [Stream] the readable stream object that can be piped
or read from (by registering 'data' event listeners).
@!macro nobrowser
Converts the request object into a readable stream that can be read from or piped into a writable stream .