Procesando subidas de PLUpload con node.js

Estoy intentando crear un componente de carga del lado del servidor en node.js, pero tengo problemas para interpretar la información enviada desde PLUpload. Por lo que puedo decir, PLUpload (en modo HTML5) envía archivos como información binaria, lo que crea problemas para los paquetes node.js que he estado intentando usar hasta ahora (node-formidable y node-express), ya que esperan ser normales Cargas HTML con tipos de contenido multiparte.

Para lo que vale, este es el código que he estado intentando usar …

var formidable = require('formidable'); var sys = require('sys'); http.createServer( function( req, res ){ console.log('request detected'); if( req.url == '/upload/' ){ console.log('request processing'); var form = new formidable.IncomingForm(); form.parse( req, function( err, fields, files ){ res.writeHead( 200, { 'Access-Control-Allow-Origin': 'http://tksync.com', 'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE', 'Access-Control-Allow-Headers': '*', 'content-type': 'text/plain' }); res.write('received upload:\n'); res.end(sys.inspect({ fields: fields, files: files })); }); } }).listen( 8080 ); 

No tengo problemas para usar plupload (en modo HTML5) con node.js con el siguiente código:

 module.exports.savePhoto= (req, res) -> if req.url is "/upload" and req.method.toLowerCase() is "post" console.log 'savePhoto: req.url=', req.url, 'req.method=', req.method form = new formidable.IncomingForm() files = [] fields = [] form.uploadDir = config.PATH_upload form.on("field", (field, value) -> console.log field, value fields.push [ field, value ] ).on("file", (field, file) -> console.log field, file files.push [ field, file ] ).on "end", -> console.log "-> upload done: fields=", fields console.log "received fields:", util.inspect(fields) console.log "received files:", util.inspect(files) size = files[0][1].size pathList = files[0][1].path.split("/") #console.log 'pathList=', pathList file = pathList[pathList.length - 1] console.log "file=" + file ...... 

node-pluploader para manejar esto, ya que encontré que la respuesta de elife no funcionaba para las subidas fragmentadas, ya que dichos fragmentos aparecen en diferentes solicitudes.

Ejemplo de uso basado en Express:

 var Pluploader = require('node-pluploader'); var pluploader = new Pluploader({ uploadLimit: 16 }); /* * Emitted when an entire file has been uploaded. * * @param file {Object} An object containing the uploaded file's name, type, buffered data & size * @param req {Request} The request that carried in the final chunk */ pluploader.on('fileUploaded', function(file, req) { console.log(file); }); /* * Emitted when an error occurs * * @param error {Error} The error */ pluploader.on('error', function(error) { throw error; }); // This example assumes you're using Express app.post('/upload', function(req, res){ pluploader.handleRequest(req, res); });