lib/blob-read-stream.js
function BlobReadStream(blob, options) {
  if (!(this instanceof BlobReadStream)) {
    return new BlobReadStream(blob, options);
  }

  Readable.call(this, options);

  options = options || {};
  this.blob = blob;
  this.slice = blob.slice || blob.webkitSlice || blob.mozSlice;
  this.start = 0;
  this.sync = options.synchronous || false;

  var fileReader;

  if (options.synchronous) {
    fileReader = this.fileReader = new FileReaderSync();
  } else {
    fileReader = this.fileReader = new FileReader();
  }

  fileReader.onload = bind(this, '_onload');
  fileReader.onerror = bind(this, '_onerror');
}
function BlobReadStream(blob, options) {
  if (!(this instanceof BlobReadStream)) {
    return new BlobReadStream(blob, options);
  }

  Readable.call(this, options);

  options = options || {};
  this.blob = blob;
  this.slice = blob.slice || blob.webkitSlice || blob.mozSlice;
  this.start = 0;
  this.sync = options.synchronous || false;

  var fileReader;

  if (options.synchronous) {
    fileReader = this.fileReader = new FileReaderSync();
  } else {
    fileReader = this.fileReader = new FileReader();
  }

  fileReader.onload = bind(this, '_onload');
  fileReader.onerror = bind(this, '_onerror');
}
function BlobReadStream ( blob , options ) { if ( ! ( this instanceof BlobReadStream ) ) { return new BlobReadStream ( blob , options ) ; } Readable . call ( this , options ) ; options = options || { } ; this . blob = blob ; this . slice = blob . slice || blob . webkitSlice || blob . mozSlice ; this . start = 0 ; this . sync = options . synchronous || false ; var fileReader ; if ( options . synchronous ) { fileReader = this . fileReader = new FileReaderSync ( ) ; } else { fileReader = this . fileReader = new FileReader ( ) ; } fileReader . onload = bind ( this , '_onload' ) ; fileReader . onerror = bind ( this , '_onerror' ) ; }
Readable stream for Blob and File on browser.

@param {Object} options
@api private
Readable stream for Blob and File on browser .