title: Accessing the raw file stream from a node-formidable file upload
body: <p>I am creating an application that takes some file uploads and send them straight up to S3.  I would prefer not to even have the tmp file on my server, so I am using the Knox module and would like to take the raw stream from Formidable and send it over Knox to S3.  I have done something similar using Knox to download a file using this code:</p>
  
  <pre><code>knox.downloads.get(widget.download).on('response',function(sres){
      res.writeHead(200, {
          'Content-Type':'application/zip',
          'Content-Length': sres.headers['content-length'],
          'Content-Disposition':'attachment; filename=' + widget.download
      });
      util.pump(sres, res);
  }).end();
  </code></pre>
  
  <p>Now I would like to do something similar in the oposite direction (File upload from the browser to S3).</p>
  
  <p>So far I have written an event handler to capture each piece of data from the file as it's being uploaded:</p>
  
  <pre><code>var form = new formidable.IncomingForm();
  form.onPart = function(part){
      if(!part.filename){
          form.handlePart(part);
      }else{
          if(part.name == 'download'){
              // Upload to download bucket
              controller.putDownload(part);
          }else{
              // Upload to the image bucket
              controller.putImage(part);
          }
          //res.send(sys.inspect(part));
      }
  }
  form.parse(req, function(err, fields, files){
      if(err){
          res.json(err);
      }else{
          res.send(sys.inspect({fields:fields, files:files}), {'content-type':'text/plain'});
          //controller.createWidget(res,fields,files);            
      }
  });
  
  
  controller.putDownload = function(part){
      part.addListener('data', function(buffer){
          knox.download.putStream(data,part.filename, function(err,s3res){
              if(err)throwError(err);
              else{
                  console.log(s3res);
              }
          });
      })
      knox.downloads.putStream(part, part.filename, function(err,s3res){
  
          if(err)throwError(err);
          else{
              console.log(s3res);
          }
      });
  }
  </code></pre>
  
  <p>But the data event only give me the buffer.  So is it possible to capture the stream itself and push it to S3?</p>